Golang中一些设定
2019-07-08 本文已影响0人
赵荆州
- 格式化时间不是用yyyy MM DD HH mm ss sss等在其他语言中常见的符号。
而是:
2006-01-02 15:04:05
now := time.Now()
nowRight := now.Format("2006-01-02 15:04:05")
完整UTC为:2006-01-02T15:04:05-07:00
- map 每次遍历都是无序的。据说是为了让开发者不要依赖不是很可靠的map有序遍历,索性改成了无序的。
正确的做法是获取到key,然后排序key,然后在遍历map:
var keys []int
for k,_ :=range map{
keys = append(keys, k)
}
sort.Ints(keys)
for _,v:=range keys{
fmt.Printf("%d-%d\n",v,aa[v])
}
- slice 不初始化不能赋值,但是用append可以
var s []int
s[0]=100
//报错,runtime error: index out of range
s=append(s,100)
//正确通过,append里面可能对s做的初始化
-
go get [-u -v]
go build : 编译出可执行文件
go install : go build + 把编译后的可执行文件放到GOPATH/bin目录下
go get : git clone + go install -
Golang不支持函数的重载
-
可以多个变量一起赋值,利用这个特性,可以很简单的实现斐波拉契数列
a:=1
b:=1
for i:=0;i<10;i++{
fmt.Println(a)
a,b=b,a+b
}
- Golang中的方法与其它语言中不一样,其它语言一般直接定义在Class 或者struct中,在Golang中是分离的。
func (recevier type) methodName(参数列表)(返回值列表){}
recevier type 是不是指针也有很大影响
func (i *integer) set(val integer){
*i = val
}
var j integer
j.set(10)
- 读取chan的两种方式
close(ch)
//第一种:
for{
b,ok:=<-ch
if !ok{
fmt.Println("chan is closed!")
break
}
fmt.Println(b)
}
//第二种:
for v:=range ch {
fmt.Println(v)
}