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