问题:
# command-line-arguments
.\example.go:22: cannot assign to m.V.(BasicMessage).Length
想在函数中修改interface表示的结构体的成员变量的值,编译时遇到这个编译错误,问题代码如下:
package main
import (
"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不能使用这种赋值方式。
解决办法:
func test(m *Message) {
bm := BasicMessage{}
bm.Length = 1
m.V = bm
}
output:
m: &{<\nil>} m: &{{1}}