结构类型不可变

时间:2014-09-11 18:39:29

标签: go

我写了一个关于为变量赋值的示例应用程序。请查看以下代码段:

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}

结构是不可变的吗?

2 个答案:

答案 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)

(如play.golang.org

答案 1 :(得分:2)

不,您的类型不兼容。 res的类型是

[]struct {
    Email     string
    Activated bool
}

但是你试图给它一个

[]struct {
    Email string
    // notice no Activated!
}

切片的元素类型是该类型的一部分;你不能这样混合和匹配,即使某些字段似乎是共享的。