我写了一个关于为变量赋值的示例应用程序。请查看以下代码段:
package main
import (
"fmt"
)
func main() {
cp := 344
fmt.Println(cp)
cp = 566565
fmt.Println(cp)
res := []struct {
Email string `json:"n.email"`
Activated bool `json:"n.activated"`
}{}
fmt.Println(res)
res = []struct {
Email string `json:"n.email"`
}{}
fmt.Println(res)
}
第一个cp变量,我再次分配值然后再次运行。最后cp的值为566565.对我而言是int可变的。
第二个代码不起作用,将新结构重新分配给res,我遇到了编译器错误。
./ double_assignment.go:23:无法使用[] struct {Email string} literal(type [] struct {Email string})as type [] struct {Email 串;分配中已激活的bool}
结构是不可变的吗?
答案 0 :(得分:2)
第一个short variable declaration res :=
确实设置了某种类型([]struct { Email string; Activated bool}
)。
如果您想指定其他类型(此处为不同的struct
文字[]struct { Email string }
),则需要使用其他变量。
res2 = []struct {
Email string `json:"n.email"`
}{}
fmt.Println(res2)
答案 1 :(得分:2)
不,您的类型不兼容。 res
的类型是
[]struct {
Email string
Activated bool
}
但是你试图给它一个
[]struct {
Email string
// notice no Activated!
}
切片的元素类型是该类型的一部分;你不能这样混合和匹配,即使某些字段似乎是共享的。