这是我的代码 http://play.golang.org/p/h0N4t2ZAKQ
package main
import (
"fmt"
"reflect"
)
type Msg struct {
Message string
}
func print(y interface{}) {
z, ok := y.(Msg)
fmt.Println(reflect.TypeOf(z))
fmt.Println("Value of ok ", ok)
if ok {
fmt.Println("Message is "+ z.Message)
}
}
func main() {
foo := new(Msg)
foo.Message="Hello"
fmt.Println("Messege in main "+foo.Message)
print(foo)
}
当我运行它时 z.Message 不打印 Hello 不知道为什么。有人可以澄清吗? 提前致谢
最佳答案
程序中foo
的类型是*Msg
(指向Msg 的指针),而不是Msg
。您需要在 print
( http://play.golang.org/p/MTi7QhSVQz ) 中将 y
转换为 *Msg
:
z, ok := y.(*Msg)
或者,您可以使用 Msg
类型作为 foo
( http://play.golang.org/p/XMftjVtzBk ):
foo := Msg{Message: "Hello"}
或
var foo Msg
foo.Message = "Hello"
关于goLang 将结构传递给函数(args 接口(interface){}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259333/