亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談Golang 嵌套 interface 的賦值問題

 更新時間:2021年04月29日 10:21:33   作者:潘廣宇 Leo  
這篇文章主要介紹了淺談Golang 嵌套 interface 的賦值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

大家還是直接看代碼吧~

package main 
import (
    "fmt"
) 
 
func main() {
    s := map[string]interface{}{
        "code":0,
        "msg":"",
        "data":map[string]interface{}{
            "src":"",
        },
    }
 
    s["data"].(map[string]interface{})["src"] = "abc"           // 修改一個屬性,類型轉(zhuǎn)換為map[string]interface{}
    s["data"].(map[string]interface{})["new"] = "bbb"           // 新增一個屬性
    fmt.Println(s)
}

補充:Golang interface賦值與取值的實例

大家還是直接看代碼吧~

bs := make(map[string]string)
bs["name"] = "張三"
bs["age"]  = "12"
var student interface{}
student = bs
a := student.(map[string]string)   //將interface轉(zhuǎn)換為map類型,如果不確定數(shù)據(jù)類型的時候可以使用類型斷言,確定其類型之后再轉(zhuǎn)換為相對應(yīng)的類型,然后取值
fmt.Printf("學(xué)生的姓名是: \n %v", a["name"])   //結(jié)果: 張三
fmt.Printf("學(xué)生的數(shù)據(jù)是: \n %v", student)

補充:go語言學(xué)習(xí)-接口賦值的兩種類型

接口賦值在go語言中分為下面兩種情況:

1、將對象實例賦值給接口

在我看來go語言的接口就是c++中虛函數(shù)的聲明,使用者可以根據(jù)自身使用的需要聲明一個函數(shù)的集合,將需要的方法都在接口中聲明,有點像c++中,子類繼承父類之后,通過子類對象給父類賦值,因為父類有的方法(除私有方法)子類肯定都有,尤其是虛函數(shù),這樣比C++好的地方是go語言中不需要通過繼承的方式來實現(xiàn)多態(tài),不同的對象只需要將接口中的所有方法都實現(xiàn)即可,本質(zhì)上和c++一樣,實現(xiàn)這些接口的對象相當(dāng)于子類,這個接口相當(dāng)于父類,不同的地方go語言中少了繼承的過程,耦合度更低。

將一個接口賦值給另一個接口(同理)

2、將對象實例賦值給接口

這要求該對象實例實現(xiàn)了所有該接口提供的方法,下面是代碼實例:

package main
import (
 "fmt"
)
type Integer int
func (a Integer)Less(b Integer) bool{
 return a<b
}
func (a *Integer)Add(b Integer) {
 *a += b
}
type Lesser interface {
 Less(b Integer) bool
}
type LessAdder interface {
 Less(b Integer) bool
 Add(b Integer)
}
func main(){
 fmt.Println("start ...")
 var inter Integer = 1
 var lesser Lesser = inter
 isLess := lesser.Less(3)
 fmt.Println(lesser,"less 3 is ",isLess)
 var lessAdder LessAdder = &inter
 lessAdder.Add(3)
 fmt.Println("lessAdder add 3 is ",inter)
 //fmt.Println("lessAdder is ",*lessAdder) //該條語句不能通過編譯
}

第二種方法通過一個接口給另一個接口賦值,在go語言中只要兩個接口擁有同樣的方法列表(次序不同不要緊),那么他們就是等同的,可以相互賦值

package one
type ReadWriter interface{
 Read(buf []byte)(n int,err error)
 Write(buf []byte)(n int,err error)
}
package two
type Istream interface{
 Read(buf []byte)(n int,err error)
 Write(buf []byte)(n int,err error)
}
var file1 one.ReadWriter = new(file)
var file2 two.Istream = file1
var file3 one.ReadWriter = file2

在go語言中,這兩個接口是等價的,因為:

1、任何實現(xiàn)了one.ReadWriter接口的類,均實現(xiàn)了two.ReadWriter

2、任何one.ReadWriter的接口可以賦值給two.ReadWriter,反之亦然

3、在任何地方使用two.ReadWriter的接口和使用one.ReadWriter的接口沒有差別

接口賦值并不是要求兩個接口是等價的,如果A的方法列表是接口B的方法列表的子集,那么接口B可以賦值給接口A,但是反過來就不成立

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 詳解Golang 推薦的命名規(guī)范

    詳解Golang 推薦的命名規(guī)范

    這篇文章主要介紹了詳解Golang 推薦的命名規(guī)范,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Go語言中的方法定義用法分析

    Go語言中的方法定義用法分析

    這篇文章主要介紹了Go語言中的方法定義用法,實例分析了方法的定義及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 如何判斷Golang接口是否實現(xiàn)的操作

    如何判斷Golang接口是否實現(xiàn)的操作

    這篇文章主要介紹了如何判斷Golang接口是否實現(xiàn)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 執(zhí)行g(shù)o?vendor第三方包版本沖突問題解決

    執(zhí)行g(shù)o?vendor第三方包版本沖突問題解決

    這篇文章主要為大家介紹了執(zhí)行g(shù)o?vendor時,第三方包go版本沖突問題的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Golang基于文件魔數(shù)判斷文件類型的案例代碼

    Golang基于文件魔數(shù)判斷文件類型的案例代碼

    這篇文章主要介紹了Golang基于文件魔數(shù)判斷文件類型,本文介紹了基于文件魔數(shù)判斷文件類型的方法,主要涉及如何ReadSeek讀取文件指定字節(jié)內(nèi)容,然后介紹文件魔數(shù),最后給出示例基于魔數(shù)判斷文件類型,需要的朋友可以參考下
    2023-02-02
  • Go語言kylin任務(wù)自動化實例詳解

    Go語言kylin任務(wù)自動化實例詳解

    這篇文章主要為大家介紹了Go語言kylin任務(wù)自動化實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一文帶你吃透Golang中net/http標(biāo)準(zhǔn)庫服務(wù)端

    一文帶你吃透Golang中net/http標(biāo)準(zhǔn)庫服務(wù)端

    這篇文章將從服務(wù)端(Server)作為切入點和大家分享一下Go語言net/http標(biāo)準(zhǔn)庫的實現(xiàn)邏輯,進而一步步分析http標(biāo)準(zhǔn)庫內(nèi)部是如何運作的,感興趣的可以了解下
    2024-03-03
  • 詳解Go語言中for range的

    詳解Go語言中for range的"坑"

    這篇文章主要介紹了詳解Go語言中for range的"坑",文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • go實現(xiàn)腳本解釋器gscript

    go實現(xiàn)腳本解釋器gscript

    這篇文章主要為大家介紹了go實現(xiàn)腳本解釋器gscript示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Go語言標(biāo)準(zhǔn)庫flag的具體實現(xiàn)

    Go語言標(biāo)準(zhǔn)庫flag的具體實現(xiàn)

    Go語言的flag庫提供了一套簡單而強大的接口,用于解析命令行參數(shù),本文主要介紹了Go語言標(biāo)準(zhǔn)庫flag的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論