最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究

 更新時(shí)間:2024年01月22日 08:33:00   作者:不焦躁程序員  
這篇文章主要為大家介紹了Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1、定義

Go語(yǔ)言支持一種特殊的字段只需要提供類型而不需要寫字段名的字段,稱之為匿名字段或者嵌套字段。

所謂匿名字段實(shí)際上是一種結(jié)構(gòu)體嵌套的方式,所以也可以稱作嵌套字段。

這種方式可以實(shí)現(xiàn)組合復(fù)用,即通過(guò)匿名字段,結(jié)構(gòu)體可以直接訪問(wèn)嵌套結(jié)構(gòu)體的字段和方法,而無(wú)需通過(guò)字段名或類型進(jìn)行嵌套。

2、簡(jiǎn)單示例

以下是一個(gè)簡(jiǎn)單的例子:

// 人
type Person struct {
  Name  string
  Phone string
}

// 打籃球
func (p *Person) playBasketball() {
  fmt.Println("打籃球...")
}

// 聯(lián)系方式
type Contact struct {
  Phone string
}

// 員工
type Employee struct {
  Person
  EmployeeId int
}

// 測(cè)試匿名字段
func TestAnonymous(t *testing.T) {
  emp := Employee{
    Person: Person{
      Name:  "baily",
      Phone: "18899999999",
    },
    EmployeeId: 1,
  }
  // 可直接使用emp調(diào)用嵌套類型的方法
  emp.playBasketball()
  
  fmt.Println("id: ", emp.EmployeeId)
  // 可直接使用emp打印出嵌套類型的所有字段
  fmt.Println("name: " + emp.Name)
  fmt.Println("name: " + emp.Phone)
}

3、嵌套類型有重復(fù)字段

在上面的例子中,Employee 結(jié)構(gòu)體嵌套了 Person 結(jié)構(gòu)體,通過(guò)這種方式,Employee 可以直接訪問(wèn) Person 的字段和方法,而無(wú)需使用類似 emp.Person.Name這樣的方式。

需要注意的是,如果結(jié)構(gòu)體中有多個(gè) 匿名字段,并且它們擁有相同的字段名,那么在訪問(wèn)這個(gè)同名字段時(shí),需要指定嵌套結(jié)構(gòu)體的類型,以避免歧義。例如:

// 人
type Person struct {
  Name  string
  Phone string
}
// 打籃球
func (p *Person) playBasketball() {
  fmt.Println("Person打籃球...")
}
// 聯(lián)系方式
type Contact struct {
  Phone string
}
func (c Contact) playBasketball() {
  fmt.Println("Contact打籃球...")
}
// 員工
type Employee struct {
  Person
  EmployeeId int
  Contact
}
// 測(cè)試匿名字段
func TestAnonymous(t *testing.T) {
  emp := Employee{
    Person: Person{
      Name:  "baily",
      Phone: "18899999999",
    },
    EmployeeId: 1,
    Contact: Contact{
      Phone: "16611111111",
    },
  }
  // 可直接使用emp調(diào)用出嵌入類型的方法
  // 多個(gè)嵌入類型的方法名相同時(shí),需要指定匿名字段的類型
  //emp.playBasketball() // 這里就會(huì)報(bào)錯(cuò)
  emp.Person.playBasketball()
  emp.Contact.playBasketball()
  // 可直接使用emp打印出嵌入類型的所有字段
  fmt.Println("id: ", emp.EmployeeId)
  fmt.Println("name: " + emp.Name)
  // 多個(gè)嵌入類型的字段名相同時(shí),需要指定匿名字段的類型
  //fmt.Println("name: " + emp.Phone) // 這里就會(huì)報(bào)錯(cuò)
  fmt.Println("name: " + emp.Person.Phone)
  fmt.Println("name: " + emp.Contact.Phone)
}

在這個(gè)例子中,Person 和 Contact 都有 Phone 字段,因此在訪問(wèn)時(shí)需要指定具體的類型以避免歧義。

同樣的,Person 和 Contact 都有 playbasketball 方法,因此在訪問(wèn)時(shí)也需要指定具體的類型以避免歧義。

如果不指定則會(huì)編譯報(bào)錯(cuò),如下:

總結(jié)

  • Go語(yǔ)言支持匿名字段或者嵌套字段,通過(guò)這種方式可以直接訪問(wèn)嵌套結(jié)構(gòu)體的字段和方法。

  • 在多個(gè)嵌套類型場(chǎng)景下,如果多個(gè)嵌套類型存在相同的字段或者方法,則需要指定具體的類型以避免歧義。

以上就是Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言匿名字段的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一篇文章讀懂Golang?init函數(shù)執(zhí)行順序

    一篇文章讀懂Golang?init函數(shù)執(zhí)行順序

    init()函數(shù)會(huì)在包被初始化后自動(dòng)執(zhí)行,并且在main()函數(shù)之前執(zhí)行,但是需要注意的是init()以及main()函數(shù)都是無(wú)法被顯式調(diào)用的,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章讀懂Golang?init函數(shù)執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Go打包二進(jìn)制文件的實(shí)現(xiàn)

    Go打包二進(jìn)制文件的實(shí)現(xiàn)

    這篇文章主要介紹了Go打包二進(jìn)制文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Go并發(fā)編程避坑指南之如何徹底解決死鎖Deadlock問(wèn)題

    Go并發(fā)編程避坑指南之如何徹底解決死鎖Deadlock問(wèn)題

    在Go語(yǔ)言的并發(fā)編程中,死鎖(Deadlock)是一種極其隱蔽且致命的錯(cuò)誤,本文將帶你深入剖析死鎖的成因,并結(jié)合 sync 包與 context 包,提供一套行之有效的解決方案,希望對(duì)大家有所幫助
    2026-04-04
  • GO語(yǔ)言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)

    GO語(yǔ)言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)

    這篇文章主要介紹了GO語(yǔ)言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)的相關(guān)資料,內(nèi)容介紹詳細(xì),具有一定的參考價(jià)值,需要的朋友可任意參考一下
    2022-03-03
  • golang實(shí)現(xiàn)對(duì)JavaScript代碼混淆

    golang實(shí)現(xiàn)對(duì)JavaScript代碼混淆

    在Go語(yǔ)言中,你可以使用一些工具來(lái)混淆JavaScript代碼,一個(gè)常用的工具是Terser,它可以用于壓縮和混淆JavaScript代碼,你可以通過(guò)Go語(yǔ)言的`os/exec`包來(lái)調(diào)用Terser工具,本文給通過(guò)一個(gè)簡(jiǎn)單的示例給大家介紹一下,感興趣的朋友可以參考下
    2024-01-01
  • Golang Http請(qǐng)求返回結(jié)果處理

    Golang Http請(qǐng)求返回結(jié)果處理

    本文主要介紹了Golang Http請(qǐng)求返回結(jié)果處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go語(yǔ)言 channel如何實(shí)現(xiàn)歸并排序中的merge函數(shù)詳解

    Go語(yǔ)言 channel如何實(shí)現(xiàn)歸并排序中的merge函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言 channel如何實(shí)現(xiàn)歸并排序中merge函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • 基于Go語(yǔ)言實(shí)現(xiàn)高性能文件上傳下載系統(tǒng)

    基于Go語(yǔ)言實(shí)現(xiàn)高性能文件上傳下載系統(tǒng)

    在Web應(yīng)用開(kāi)發(fā)中,文件上傳下載是一個(gè)非常常見(jiàn)的需求,本文將介紹如何使用Go語(yǔ)言實(shí)現(xiàn)一個(gè)安全、高效的本地文件存儲(chǔ)系統(tǒng),感興趣的小伙伴可以了解下
    2025-03-03
  • golang?recover函數(shù)使用中的一些坑解析

    golang?recover函數(shù)使用中的一些坑解析

    這篇文章主要為大家介紹了golang?recover函數(shù)使用中的一些坑解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • go語(yǔ)言fasthttp使用實(shí)例小結(jié)

    go語(yǔ)言fasthttp使用實(shí)例小結(jié)

    fasthttp?是一個(gè)使用?Go?語(yǔ)言開(kāi)發(fā)的?HTTP?包,主打高性能,針對(duì)?HTTP?請(qǐng)求響應(yīng)流程中的?hot?path?代碼進(jìn)行了優(yōu)化,下面我們就來(lái)介紹go語(yǔ)言fasthttp使用實(shí)例小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03

最新評(píng)論

龙江县| 勃利县| 芦溪县| 阿城市| 敦煌市| 云和县| 彰武县| 湘乡市| 汉阴县| 芦溪县| 保德县| 青州市| 大庆市| 娄烦县| 界首市| 德州市| 涟源市| 新津县| 海南省| 独山县| 铜陵市| 内黄县| 宜昌市| 汉寿县| 夏邑县| 叙永县| 承德县| 大渡口区| 四川省| 高安市| 高雄市| 漾濞| 博乐市| 镇雄县| 射洪县| 晋城| 玛曲县| 威信县| 商都县| 和田县| 大英县|