本篇主要记录一些小tip,而不是完整知识点的记录
tip1:应用程序的入口的包必须是main,必须有main方法
tip2:main函数不支持返回值和传参,需要通过os.exit 和 os.arg(虽然没啥用)
func main() {
if os.Args[1] == "1" {
os.Exit(0)
} else {
os.Exit(-1)
}
}
tip3:连续常量的定义
iota 从0开始自增,一个const里 iota不会重置
const (
one = 1 + iota
two
three four = 4
five = 5 + iota
six
)
tip4:字符串是值类型,默认是空串,不是nil
tip5:数组的比较,维度不同或者数据类型不同都编译不过,维度相同必须内容完全一致
arr1 := [5]int{}
arr2 := [6]int{}
println(arr1 == arr2) // 编译失败
tip6:切片的append是从len后append的,改变了长度,cap当不够了后,翻倍增长
tip7:切片可以共享存储结构,不需要浪费新的空间
tip8:切片不能比较,数组可以比较(tip5)
tip9:map中不存在的key是返回value的默认值,不会报错,所以可以用if v, ok := m[2]; ok
tip10:使用map[type]bool实现set
tip11:函数与主流语言的差异
可以有多个返回值
只有值传递
可以作为变量
可以作为参数和返回值
tip 11:String 是一个byte的切片,len求他的byte数
tip12:不可变的byte切片,不能赋值
tip13:字符串小知识
s := "我是csz"
t.Log(len(s)) // 3 + 3 + 3 = 9
t.Log(len([]rune(s))) 5
for _,e := range s {
t.Log(string(e)) //字符
}
tip14:常用的字符串库 strings,strconv
tip15:panic后面的代码不会执行了,但是defer注册的延时加载可以执行
有疑问加站长微信联系(非本文作者)