goLang 将结构传递给函数(args 接口(interface){})

标签 go type-assertion

这是我的代码 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/

相关文章:

go - 如何仅使用一种方法删除不同类型的 slice

Go - 如何使用 http.NewRequest 进行测试

go - 类型转换和类型断言有什么区别?

go - 将自定义类型断言为基本类型

typescript - 为什么 TypeScript 没有实现类型转换而只实现类型断言

go - golang内部是如何映射的?

go - 使用旧表中的架构和数据创建表

c - Golang C (.so) 在调用时导入分段违规

http - go语言如何通过http请求下载文件

go - map.LoadOrStore 返回的地址值是否与嵌套 map 的输入相同?