Golang中一些设定

  1. 格式化时间不是用yyyy MM DD HH mm ss sss等在其他语言中常见的符号。
    而是:
    2006-01-02 15:04:05

    1
    2
    3
    now := time.Now()
    nowRight := now.Format("2006-01-02 15:04:05")

    完整UTC为:2006-01-02T15:04:05-07:00

  2. map 每次遍历都是无序的。据说是为了让开发者不要依赖不是很可靠的map有序遍历,索性改成了无序的。
    正确的做法是获取到key,然后排序key,然后在遍历map:

    1
    2
    3
    4
    5
    6
    7
    8
    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])
    }
  3. slice 不初始化不能赋值,但是用append可以

    1
    2
    3
    4
    5
    var s []int
    s[0]=100
    //报错,runtime error: index out of range
    s=append(s,100)
    //正确通过,append里面可能对s做的初始化
  4. go get [-u -v]
    go build : 编译出可执行文件
    go install : go build + 把编译后的可执行文件放到GOPATH/bin目录下
    go get : git clone + go install

  5. Golang不支持函数的重载

  6. 可以多个变量一起赋值,利用这个特性,可以很简单的实现斐波拉契数列

    1
    2
    3
    4
    5
    6
    a:=1
    b:=1
    for i:=0;i<10;i++{
    fmt.Println(a)
    a,b=b,a+b
    }
  7. Golang中的方法与其它语言中不一样,其它语言一般直接定义在Class 或者struct中,在Golang中是分离的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    func (recevier type) methodName(参数列表)(返回值列表){}

    recevier type 是不是指针也有很大影响

    func (i *integer) set(val integer){
    *i = val
    }

    var j integer
    j.set(10)
  8. 读取chan的两种方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    close(ch)
    //第一种:
    for{
    b,ok:=<-ch
    if !ok{
    fmt.Println("chan is closed!")
    break
    }
    fmt.Println(b)
    }
    //第二种:
    for v:=range ch {
    fmt.Println(v)
    }
  9. go 不支持三目(三元)运算符

作者

太阳当空赵先生

发布于

2019-07-08

更新于

2022-02-22

许可协议

评论