3 回答
TA贡献1786条经验 获得超11个赞
问题出在变量名上v。请参考以下代码
func Exported (v interface{}){
v, ok := v.(Foo)
if !ok {
log.Fatal("oh fuk")
}
// but v.Bar is not available here tho ??
}
在这里,接口名称是v并且在类型转换之后,它被分配给变量v 因为v是interface类型,你无法检索Foo结构的值。
要克服这个问题,请在类型转换中使用另一个名称,例如
b, ok := v.(Foo)
你将能够Bar使用获得价值b.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)
}
TA贡献1856条经验 获得超17个赞
func main() {
f := Foo{"test"}
Exported(f)
}
type Foo struct{
Bar string
}
func Exported (v interface{}){
t, ok := v.(Foo)
if !ok {
log.Fatal("boom")
}
fmt.Println(t.Bar)
}
TA贡献1785条经验 获得超4个赞
我犯了这个错误:
func Exported (v interface{}){
v, ok := v.(Foo)
if !ok {
log.Fatal("oh fuk")
}
// but v.Bar is not available here tho ??
}
您需要使用不同的变量名称:
func Exported (x interface{}){
v, ok := x.(Foo)
if !ok {
log.Fatal("oh fuk")
}
// now v.Bar compiles without any further work
}
- 3 回答
- 0 关注
- 120 浏览
添加回答
举报