Golang 学习笔记大杂烩
命令行参数
遍历所有参数
// os.Arg[1:]
for index,args:=range os.Args[1:]{
fmt.Println("参数"+strconv.Itoa(index)+":"+args)
}
fmt.Println(strings.Join(os.Args[1:],"\n"))
单取参数
// 取出来是指针
b=flag.Bool("b",false,"bool类型参数")
s=flag.String("s","hehehe","string类型参数")
flag.Parse()
fmt.Println("-b=",*b)
fmt.Println("-s=",*s)
Slice判空
测试一个slice是否为空,应该用len= =0判断而不是slice= =nil
// true 0 0
// false 0 0
// false 0 0
var ints []int
fmt.Println(ints==nil, len(ints), cap(ints))
ints = []int{}
fmt.Println(ints==nil, len(ints), cap(ints))
i := ints[:0]//与ints共享内存空间
fmt.Println(i==nil, len(i), cap(i))
Map判存在
用ok判断Map中值是否真的存在
// 不存在默认为类型零值
m := make(map[string]int)
//m["0"]=0
i2,ok := m["0"] //i2,ok=0,nil
if !ok{
fmt.Println("不存在")
循环迭代小坑
for range循环变量内存地址不变,谨慎使用
// 0:int32 0xc0000100d0 卢
// 1:int32 0xc0000100d0 本
// 2:int32 0xc0000100d0 伟
// 3:int32 0xc0000100d0 牛
// 4:int32 0xc0000100d0 逼
var str []rune= []rune("卢本伟牛逼")
for i,v:=range str{
fmt.Printf("%d:%T %v %c\n",i,v,&v,v)
}