文章目录
- 1、_
- 2、包名
- 3、命名大小影响可访问范围
- 4、运算符
- 5、获取终端输入
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)
}