golang cannot assign to

来源:互联网 发布:ipad能刷windows系统吗 编辑:程序博客网 时间:2024/06/05 16:14

问题:

# command-line-arguments
.\example.go:22: cannot assign to m.V.(BasicMessage).Length

想在函数中修改interface表示的结构体的成员变量的值,编译时遇到这个编译错误,问题代码如下:

package mainimport (        "fmt")type Message struct {        V interface{}}type BasicMessage struct {        Length int}func test(m *Message) {        m.V.(BasicMessage).Length = 1}func main() {        m := &Message{}        fmt.Println("m:", m)        test(m)        fmt.Println("m:", m)}

原因:

interface不能使用这种赋值方式。

解决办法:

将test函数中赋值方式修改为:

func test(m *Message) {        bm := BasicMessage{}        bm.Length = 1        m.V = bm}

output:

m: &{<\nil>}
m: &{{1}}