使用接口的 GO 类型强制转换和分配

我无法理解使用接口进行类型转换。


有一个使用指针设置值的示例:


func main() {

    a := &A{}

    

    cast(a, "BBB")


    fmt.Println(a.s)

}


type A struct {

    s string

}


func cast(a *A, b interface{}) {

    a.s = b.(string)

}

该程序的输出将打印 。BBB


现在我的问题是,如果我想设置比字符串更多怎么办?我想我想做这样的事情:


func main() {

    a := &A{}

    

    cast(&(a.s), "BBB")


    fmt.Println(a.s)


}


type A struct {

    s string

}


func cast(a interface{}, b interface{}) {

    // Here could be type switch to determine what kind of type I want to cast to, but for know string is enough...

    a = b.(string)

}

此代码的输出是一个空字符串...任何人都可以帮助我理解我做错了什么吗?


噜噜哒
浏览 96回答 1
1回答

开心每一天1111

第二个程序赋值给局部变量,而不是调用方的变量。aa必须取消引用要分配给调用方值的指针。为此,您需要一个指针类型。使用类型断言获取指针类型:func cast(a interface{}, b interface{}) {     *a.(*string) = b.(string) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go