欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Golang 嵌套 interface 的賦值問(wèn)題

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

大家還是直接看代碼吧~

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"           // 修改一個(gè)屬性,類型轉(zhuǎn)換為map[string]interface{}
    s["data"].(map[string]interface{})["new"] = "bbb"           // 新增一個(gè)屬性
    fmt.Println(s)
}

補(bǔ)充:Golang interface賦值與取值的實(shí)例

大家還是直接看代碼吧~

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ù)類型的時(shí)候可以使用類型斷言,確定其類型之后再轉(zhuǎn)換為相對(duì)應(yīng)的類型,然后取值
fmt.Printf("學(xué)生的姓名是: \n %v", a["name"])   //結(jié)果: 張三
fmt.Printf("學(xué)生的數(shù)據(jù)是: \n %v", student)

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

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

1、將對(duì)象實(shí)例賦值給接口

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

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

2、將對(duì)象實(shí)例賦值給接口

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

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) //該條語(yǔ)句不能通過(guò)編譯
}

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

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語(yǔ)言中,這兩個(gè)接口是等價(jià)的,因?yàn)椋?/h2>

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

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

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

接口賦值并不是要求兩個(gè)接口是等價(jià)的,如果A的方法列表是接口B的方法列表的子集,那么接口B可以賦值給接口A,但是反過(guò)來(lái)就不成立

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

相關(guān)文章

  • Go字符串操作深入解析

    Go字符串操作深入解析

    這篇文章主要為大家介紹了Go字符串操作深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 解決Go?Json?Unmarshal反序列化丟失數(shù)字精度問(wèn)題

    解決Go?Json?Unmarshal反序列化丟失數(shù)字精度問(wèn)題

    業(yè)務(wù)會(huì)使用?id生成器?產(chǎn)生的?分布式唯一ID,長(zhǎng)度比較長(zhǎng),所以代碼反序列化時(shí),會(huì)出現(xiàn)精度丟失問(wèn)題,那如何解決呢,下面小編就來(lái)和大家詳細(xì)講講
    2023-08-08
  • Golang 斷言與閉包使用解析

    Golang 斷言與閉包使用解析

    這篇文章主要介紹了Golang 斷言與閉包使用解析,Go中的斷言用于判斷變量的類型,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Go秒爬博客園100頁(yè)新聞

    Go秒爬博客園100頁(yè)新聞

    利用go語(yǔ)言的協(xié)程并發(fā)優(yōu)勢(shì)爬取網(wǎng)頁(yè)速度相當(dāng)之快,博客園100頁(yè)新聞標(biāo)題只需一秒即可全部爬取,跟著小編一起去看看如何實(shí)現(xiàn)的,希望大家可以從中受益
    2018-09-09
  • Go語(yǔ)言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    Go語(yǔ)言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)Json序列化反序列化以及文件讀寫的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Go中阻塞以及非阻塞操作實(shí)現(xiàn)(Goroutine和main Goroutine)

    Go中阻塞以及非阻塞操作實(shí)現(xiàn)(Goroutine和main Goroutine)

    本文主要介紹了Go中阻塞以及非阻塞操作實(shí)現(xiàn)(Goroutine和main Goroutine),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • GO開發(fā)編輯器安裝圖文詳解

    GO開發(fā)編輯器安裝圖文詳解

    這篇文章主要介紹了GO開發(fā)編輯器安裝,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)

    golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)

    這篇文章主要介紹了golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Golang之模糊測(cè)試工具的使用

    Golang之模糊測(cè)試工具的使用

    本文主要介紹了Golang之模糊測(cè)試工具的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang?四則運(yùn)算計(jì)算器yacc歸約手寫實(shí)現(xiàn)

    golang?四則運(yùn)算計(jì)算器yacc歸約手寫實(shí)現(xiàn)

    這篇文章主要為大家介紹了golang?四則運(yùn)算?計(jì)算器?yacc?歸約的手寫實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論