第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 interface{} 轉換為類型

將 interface{} 轉換為類型

Go
12345678_0001 2023-05-15 10:37:35
說我有這樣的事情: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,它不會編譯。
查看完整描述

3 回答

?
Qyouu

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)

}


查看完整回答
反對 回復 2023-05-15
?
慕慕森

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)

}


查看完整回答
反對 回復 2023-05-15
?
九州編程

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


}


查看完整回答
反對 回復 2023-05-15
  • 3 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號