近期写 Go 的一点语法碎片整理

获取 UNIX 时间戳

now := time.Now().Unix()
fmt.Println("type: %T, value: %v", now, now)
type: int64, value: 1535031653

向 slice 里追加元素

s := []int{1, 2, 3}
s = append(s, 4)
fmt.Println(s)
[1 2 3 4]

遍历 map

m := make(map[string][]int)
m["hello"] = []int{1, 2, 3}
m["world"] = []int{4, 5, 6}
for k, v := range m {
    fmt.Println(k, v)
}
for k := range m {
    fmt.Println(k)
}
for _, v := range m {
    fmt.Println(v)
}
hello [1 2 3]
world [4 5 6]
hello
world
[1 2 3]
[4 5 6]

删除 map 中的元素

m := make(map[string][]int)
m["hello"] = []int{1, 2, 3}
m["world"] = []int{4, 5, 6}
delete(m, "hello")
for k, v := range m {
    fmt.Println(k, v)
}
world [4 5 6]

值得注意的一点:在对一个 map 的 range loop 中,删除 map 的元素,例如下面这段伪代码,是安全的。

for key := range m {
    if key.expired() {
        delete(m, key)
    }
}

详细问题及解释见 StackOverflow

结构体的定义和初始化

type st struct {
    a int
    b int
    c string
}
x := st{a: 10, b: 20, c: "hello"}
fmt.Println(x)
x.c = "world"
fmt.Println(x)
{10 20 hello}
{10 20 world}
标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注