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 關注
- 175 瀏覽
添加回答
舉報