【Go】四、包名、访问范围控制、标识符、运算符

发布于:2024-03-30 ⋅ 阅读:(64) ⋅ 点赞:(0)

1、_

  • 下划线"_"本身在Go中是一个特殊的标识符,称为空标识符
  • 用于忽略某个值

1)忽略导入的没使用的包

在这里插入图片描述

2)忽略某个返回值

在这里插入图片描述

2、包名

  • main包是程序的入口包,main函数所在包定义为main包

在这里插入图片描述

  • 不定义main包,就不能得到编译后的可执行文件
package abc

//....略

//编译:
go run:cannot run non-main package
  • 尽量保持package的名字和目录保持一致

在这里插入图片描述

  • 别和go的标准库冲突
//error
package fmt

3、命名大小影响可访问范围

利用首字母大写小写完成权限控制,对于变量名、函数名、常量名:

  • 若首字母大写,则可以被其他的包访问 ⇒ Java的public
  • 若首字母小写,则只能在本包中使用 ⇒ Java的private
package test

var stuNo int = 9527   //定义学号变量

以下访问其他包中小写字母开头的变量,访问不到:cannot refer to unexported name test.stuNo

package main
import (
	"fmt"
	"gocode/project/test"
)

func main(){
	fmt.Println(test.stuNo)	//访问不到
}

注意,导包时,包名是从$GOPATH/src/后开始计算的,因此需要配置一个环境变量

在这里插入图片描述

在这里插入图片描述

修改test包中的变量为大写命名:

package test

var StuNo int = 9527   //定义学号变量

可以成功访问了:

在这里插入图片描述

4、运算符

在这里插入图片描述

和Java相比:

  • ++,--只能在变量的后面,不能写在变量的前面 --a ++a 错误写法
  • 不支持三目运算符
  • 短路与&&、短路或|| 都和Java一样
  • 其他运算符 &、*用于指针变量,前者取变量地址,后者取指针变量(的值)所指向的变量的值
package main
import "fmt"
func main(){
        //+加号:
        //1.正数 2.相加操作  3.字符串拼接
        var n1 int = +10
        fmt.Println(n1)
        var n2 int = 4 + 7
        fmt.Println(n2)
        var s1 string = "abc" + "def"
        fmt.Println(s1)
        
        // /除号:
        fmt.Println(10/3) //两个int类型数据运算,结果一定为整数类型
        fmt.Println(10.0/3)//浮点类型参与运算,结果为浮点类型
        // % 取模  等价公式: a%b=a-a/b*b
        fmt.Println(10%3) // 10%3= 10-10/3*3 = 1
        fmt.Println(-10%3)
        fmt.Println(10%-3)
        fmt.Println(-10%-3)
        
        //++自增操作:
        var a int = 10
        a++
        fmt.Println(a)
        a--
        fmt.Println(a)
        //++ 自增 加1操作,--自减,减1操作
        //go语言里,++,--操作非常简单,只能单独使用,不能参与到运算中去
        //go语言里,++,--只能在变量的后面,不能写在变量的前面 --a  ++a  错误写法
}

5、获取终端输入

方式一:fmt包的Scanln函数

注意:

  • 传入的是接收用户输入的变量的地址
  • 录入数据的时候,类型一定要匹配,因为底层会自动判定类型的,类型不匹配时,按类型的默认值处理
package main
import "fmt"
func main(){
        //实现功能:键盘录入学生的年龄,姓名,成绩,是否是VIP
        var age int
        fmt.Println("请录入学生的年龄:")
        //传入age的地址的目的:在Scanln函数中,对地址中的值进行改变的时候,实际外面的age被影响了
        fmt.Scanln(&age)//录入数据的时候,类型一定要匹配,因为底层会自动判定类型的
        var name string
        fmt.Println("请录入学生的姓名:")
        fmt.Scanln(&name)
        var score float32
        fmt.Println("请录入学生的成绩:")
        fmt.Scanln(&score)
        var isVIP bool
        fmt.Println("请录入学生是否为VIP:")
        fmt.Scanln(&isVIP)
        //将上述数据在控制台打印输出,%v原样输出我传入的变量的值
        fmt.Printf("学生的年龄为:%v,姓名为:%v,成绩为:%v,是否为VIP:%v",age,name,score,isVIP)
}

方式二:fmt包的Scanf函数

package main
import "fmt"
func main(){       
        var age int       
        var name string        
        var score float32    
        var isVIP bool       
        //方式2:Scanf
        fmt.Println("请录入学生的年龄,姓名,成绩,是否是VIP,使用空格进行分隔")
        fmt.Scanf("%d %s %f %t",&age,&name,&score,&isVIP)
        //将上述数据在控制台打印输出:
        fmt.Printf("学生的年龄为:%v,姓名为:%v,成绩为:%v,是否为VIP:%v",age,name,score,isVIP)
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到