社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
t := []int{}
t = append(t, 1)
fmt.Println(t) // [1]
t := map[string]int{}
t["test"] = 1
fmt.Println(t) // map[test:1]
var t []int
t = append(t, 1)
fmt.Println(t) // [1]
var t map[string]int
t["test"] = 1 // panic: assignment to entry in nil map
fmt.Println(t)
var i []int
j := i
j = append(i, 1)
fmt.Println(i == nil) // true
fmt.Println(j == nil) // false
var i map[string]int
j := i
i["test"] = 1
i
和 j
都是 nil
值,改变一个不应该改变另一个。(与 nil slice
的行为保持一致)
如果支持 nil map
赋值,那么在这里将会同时改变 i
和 j
的值。
i["test"] = 1
没有返回任何值,不像 append
返回了一个 new slice
。这是一个 statement
(语句),不是一个 expression
(表达式)。
可参考相关讨论:Why need a special rule for nil map?
var t []int
t = append(t, 1)
var t map[string]int
// 仿照 append 加入 set 全局函数
// 让 nil map set 返回 new map
t = set(t, "test", 1)
var t []int
// 将 append 全局函数变为 slice 的方法
// 这样 nil slice append 也会 panic
t.append(1)
var t map[string]int
t["test"] = 1
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!