gpt4 book ai didi

go - 将 interface{} 转换为类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:45:30 25 4
gpt4 key购买 nike

假设我有这样的东西:

type Foo struct{
Bar string
}

func Exported (v interface{}){
// cast v to Foo
}

有没有办法在导出函数中将 v 转换为 Foo?

我尝试了这样的类型断言:

func Exported (v interface{}){

v, ok := v.(Foo)

if !ok {
log.Fatal("oh fuk")
}

// but v.Bar is not available here tho ??

}

问题是如果我在断言后尝试访问 v.Bar,它不会编译。

最佳答案

问题出在变量名 v 上。请引用下面的代码

func Exported (v interface{}){

v, ok := v.(Foo)

if !ok {
log.Fatal("oh fuk")
}

// but v.Bar is not available here tho ??

}

这里,接口(interface)名称是v,类型转换后,它赋值给变量v由于 vinterface 类型,您无法检索 Foo 结构的值。

为了克服这个问题,在类型转换中使用另一个名字,比如

b, ok := v.(Foo)

并且您将能够使用 b.Bar 获取 Bar

工作示例如下:

package main

import (
"log"
"fmt"
)

func main() {
foo := Foo{Bar: "Test@123"}
Exported(foo)
}


type Foo struct{
Bar string
}

func Exported (v interface{}){
// cast v to Foo
b, ok := v.(Foo)

if !ok {
log.Fatal("oh fuk")
}

fmt.Println(b.Bar)
}

关于go - 将 interface{} 转换为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53587603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com