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

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

如何從用作泛型的接口訪問結(jié)構(gòu)屬性

如何從用作泛型的接口訪問結(jié)構(gòu)屬性

Go
慕神8447489 2023-04-17 16:23:08
也許我只是讓我的代碼變得過于復(fù)雜,但我正在努力更好地理解接口和結(jié)構(gòu)在 golang 中的工作方式?;旧?,我將滿足接口 I 的元素存儲在哈希表中。由于所有滿足 I 的項目都可以包含在 I 元素中,我想我可以將 I 用作一種“通用”接口,將它們填充到哈希圖中,然后稍后將它們拉出并訪問“underlyng”結(jié)構(gòu)方法從那里。不幸的是,在拉出元素后,我發(fā)現(xiàn)我無法調(diào)用結(jié)構(gòu)方法,因為元素是接口類型,并且“原始”結(jié)構(gòu)不再可訪問。有沒有一種方法可以干凈簡單地訪問滿足我的結(jié)構(gòu)?這是我的代碼,它在 for 循環(huán)中拋出一個“value.name undefined (type I has no field or method name)”:/** * Define the interface */type I interface{    test()}/** * Define the struct */type S struct{    name string}/** *  S now implements the I interface */func (s S) test(){}func main(){    /**     * Declare and initialize s S     */    s := S{name:"testName"}    /**     * Create hash table     * It CAN contains S types as they satisfy I interface     * Assign and index to s S     */    testMap := make(map[string]I)    testMap["testIndex"] = s    /**     * Test the map length     */    fmt.Printf("Test map length: %d\r\n", len(testMap))    for _, value := range testMap{        /**         * This is where the error is thrown, value is of Interface type, and it is not aware of any "name" property         */        fmt.Printf("map element name: %s\r\n", value.name)    }}
查看完整描述

3 回答

?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

您應(yīng)該向您的界面添加一個訪問器:


type I interface {

    test()

    Name() string

}

然后確保你的結(jié)構(gòu)實現(xiàn)了這個方法:


func (s S) Name() string {

    return s.name

}

然后使用訪問器方法訪問名稱:


        fmt.Printf("map element name: %s\r\n", value.Name())


查看完整回答
反對 回復(fù) 2023-04-17
?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

我認為你需要的是type swithes在旅途中

您可以訪問底層結(jié)構(gòu),如下所示:


查看完整回答
反對 回復(fù) 2023-04-17
?
慕姐4208626

TA貢獻1852條經(jīng)驗 獲得超7個贊

for _, value := range testMap {

    switch v := value.(type) {

    case S:

        fmt.Printf("map element name: %s\r\n", v.name)

        // TODO: add other types here

    }

}


查看完整回答
反對 回復(fù) 2023-04-17
  • 3 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號