中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Golang中嵌套 interface

發布時間:2021-04-29 15:42:29 來源:億速云 閱讀:438 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何在Golang中嵌套 interface,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

什么是golang

golang 是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言,其語法與 C語言相近,但并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能。

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"           // 修改一個屬性,類型轉換為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轉換為map類型,如果不確定數據類型的時候可以使用類型斷言,確定其類型之后再轉換為相對應的類型,然后取值
fmt.Printf("學生的姓名是: \n %v", a["name"])   //結果: 張三
fmt.Printf("學生的數據是: \n %v", student)

補充:go語言學習-接口賦值的兩種類型

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

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

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

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

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

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

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、任何實現了one.ReadWriter接口的類,均實現了two.ReadWriter

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

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

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

看完上述內容,你們對如何在Golang中嵌套 interface有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜都市| 大宁县| 咸丰县| 西乌珠穆沁旗| 南康市| 武宣县| 涪陵区| 丘北县| 郓城县| 大化| 筠连县| 汾阳市| 阳江市| 桃园市| 舒城县| 凤冈县| 越西县| 彭州市| 六枝特区| 洛南县| 荃湾区| 南涧| 隆德县| 高陵县| 水城县| 漳州市| 滨海县| 安平县| 枣强县| 岳池县| 闵行区| 麦盖提县| 大渡口区| 石首市| 会泽县| 大丰市| 景东| 五常市| 中江县| 秀山| 太仆寺旗|