文章目录
- 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 testvar 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 testvar StuNo int = 9527 //定义学号变量
可以成功访问了:
4、运算符
和Java相比:
++,--只能在变量的后面
,不能写在变量的前面 --a ++a 错误写法不支持三目运算符
- 短路与&&、短路或|| 都和Java一样
- 其他运算符 &、*用于指针变量,前者取变量地址,后者取指针变量(的值)所指向的变量的值
package main
import "fmt"
func main(){//+加号://1.正数 2.相加操作 3.字符串拼接var n1 int = +10fmt.Println(n1)var n2 int = 4 + 7fmt.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*bfmt.Println(10%3) // 10%3= 10-10/3*3 = 1fmt.Println(-10%3)fmt.Println(10%-3)fmt.Println(-10%-3)//++自增操作:var a int = 10a++fmt.Println(a)a--fmt.Println(a)//++ 自增 加1操作,--自减,减1操作//go语言里,++,--操作非常简单,只能单独使用,不能参与到运算中去//go语言里,++,--只能在变量的后面,不能写在变量的前面 --a ++a 错误写法
}
5、获取终端输入
方式一:fmt包的Scanln函数
注意:
- 传入的是接收用户输入的变量的地址
- 录入数据的时候,类型一定要匹配,因为底层会自动判定类型的,类型不匹配时,按类型的默认值处理
package main
import "fmt"
func main(){//实现功能:键盘录入学生的年龄,姓名,成绩,是否是VIPvar age intfmt.Println("请录入学生的年龄:")//传入age的地址的目的:在Scanln函数中,对地址中的值进行改变的时候,实际外面的age被影响了fmt.Scanln(&age)//录入数据的时候,类型一定要匹配,因为底层会自动判定类型的var name stringfmt.Println("请录入学生的姓名:")fmt.Scanln(&name)var score float32fmt.Println("请录入学生的成绩:")fmt.Scanln(&score)var isVIP boolfmt.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:Scanffmt.Println("请录入学生的年龄,姓名,成绩,是否是VIP,使用空格进行分隔")fmt.Scanf("%d %s %f %t",&age,&name,&score,&isVIP)//将上述数据在控制台打印输出:fmt.Printf("学生的年龄为:%v,姓名为:%v,成绩为:%v,是否为VIP:%v",age,name,score,isVIP)
}