真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語(yǔ)言中如何使用結(jié)構(gòu)體

這篇文章將為大家詳細(xì)講解有關(guān)Go語(yǔ)言中如何使用結(jié)構(gòu)體,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)建站專(zhuān)注于播州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供播州營(yíng)銷(xiāo)型網(wǎng)站建設(shè),播州網(wǎng)站制作、播州網(wǎng)頁(yè)設(shè)計(jì)、播州網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造播州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供播州網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

結(jié)構(gòu)體

結(jié)構(gòu)體是 go 語(yǔ)言中一個(gè)比較重要的概念,在 c  語(yǔ)言中也有類(lèi)似的東西。由于他們沒(méi)有類(lèi)的概念,結(jié)構(gòu)體可以簡(jiǎn)單理解成類(lèi),是一個(gè)不同類(lèi)型的數(shù)據(jù)構(gòu)成的一個(gè)集合。集合中不同類(lèi)型的數(shù)據(jù)被稱(chēng)為成員,每個(gè)成員都要自己不同的類(lèi)型,可以理解為  js 中對(duì)象的每個(gè)屬性。

聲明結(jié)構(gòu)體

結(jié)構(gòu)體通過(guò) type 和 struct 關(guān)鍵字進(jìn)行聲明,type 后接結(jié)構(gòu)體的名字,struct 后接結(jié)構(gòu)體每個(gè)成員的定義。

type Person struct {   name string  age int   gender string   address string }

上面代碼有點(diǎn)類(lèi)似于其他語(yǔ)言中接口的定義,實(shí)際上,go 也支持定義接口,我們只需要將 struct 關(guān)鍵字替換成 interface  就表示定義接口。

初始化結(jié)構(gòu)體

初始化結(jié)構(gòu)體有兩種方式,一種是通過(guò)字面量的方式,用結(jié)構(gòu)體名稱(chēng)加上結(jié)構(gòu)體各個(gè)成員值的方式進(jìn)行初始化。用上面的 Person 結(jié)構(gòu)體舉例:

var p = Person{"Shenfq", 25, "男", "湖南長(zhǎng)沙"} fmt.Println("Person:", p)

 Go語(yǔ)言中如何使用結(jié)構(gòu)體

這種方式需要每個(gè)值按照結(jié)構(gòu)體成員定義時(shí)的順序進(jìn)行初始化,當(dāng)然,也可以通過(guò)鍵值對(duì)的方式,打亂其順序。這種方式可以對(duì)部分成員進(jìn)行省略,省略的部分會(huì)根據(jù)其類(lèi)型,取該類(lèi)型的空值。

var p = Person{   name: "Shenfq",   address: "湖南長(zhǎng)沙", }  fmt.Println("Person:", p) fmt.Println("Person.age:", p.age)

如果要訪(fǎng)問(wèn)結(jié)構(gòu)體成員,可以通過(guò) . 操作符,這與其他語(yǔ)言取對(duì)象屬性的方式一致。這里我們使用 p.age 的方式獲取了結(jié)構(gòu)體 p 的成員 age  的值。

Go語(yǔ)言中如何使用結(jié)構(gòu)體

除了字面量的方式初始化,結(jié)構(gòu)體還可以通過(guò) new 關(guān)鍵字進(jìn)行初始化。

var p = new(Person)

通過(guò)該方式初始化的結(jié)構(gòu)體有兩個(gè)特點(diǎn):

  • new 關(guān)鍵字返回的為結(jié)構(gòu)體指針;

  • new 關(guān)鍵字返回的結(jié)果每個(gè)成員都是空值;

所以,我們通過(guò) new 初始化結(jié)構(gòu)體的時(shí)候,取值的時(shí)候需要加 * 號(hào)。

var p = new(Person) p.name = "Shenfq" p.age = 18 p.gender = "男" p.address = "湖南長(zhǎng)沙"  fmt.Println("Person:", p)

如果直接在控制臺(tái)打印變量 p,會(huì)發(fā)現(xiàn)前面有個(gè) &,表示這是一個(gè)指針。

Go語(yǔ)言中如何使用結(jié)構(gòu)體

匿名結(jié)構(gòu)體

結(jié)構(gòu)體和函數(shù)一樣也可以定義一個(gè)沒(méi)有名字的結(jié)構(gòu)體,就是在定義結(jié)構(gòu)體的同時(shí)進(jìn)行初始化,并且省略 type 關(guān)鍵字和結(jié)構(gòu)體名稱(chēng)。

var p = struct {   name string   age int   gender string   address string } { "Shenfq", 25, "男", "湖南長(zhǎng)沙"}

方法

結(jié)構(gòu)體只能定義一個(gè)個(gè)成員,而且成員都是基礎(chǔ)類(lèi)型,想要實(shí)現(xiàn)類(lèi)似 OOP  中類(lèi)的概念,還需要為結(jié)構(gòu)體提供方法。實(shí)際上,我們可以為結(jié)構(gòu)體指定方法,只需要在定義函數(shù)的函數(shù)名前面加上結(jié)構(gòu)體名,就能定義該函數(shù)為結(jié)構(gòu)體的方法。

我們?yōu)橹暗?Person 結(jié)構(gòu)體定義一個(gè) sayHello 的方法。

func (p Person) sayHello(name string) {  fmt.Printf("Hi %s, I'm %s, How are you?\n", name, p.name) } p.sayHello("Jack")

調(diào)用結(jié)構(gòu)體方法的方式,和取結(jié)構(gòu)體成員的值一樣,也需要通過(guò) . 操作符。

Go語(yǔ)言中如何使用結(jié)構(gòu)體

在 goland 的 Structure 中,能看到 Person 結(jié)構(gòu)體是包含 sayHello  方法的,說(shuō)明方法的定義即使不在結(jié)構(gòu)體內(nèi),這個(gè)方法也是屬于該結(jié)構(gòu)體的。

Go語(yǔ)言中如何使用結(jié)構(gòu)體

方法中的指針

有時(shí)候,我們調(diào)用方法的同時(shí),需要修改結(jié)構(gòu)體中一些成員的值,會(huì)發(fā)現(xiàn)原結(jié)構(gòu)體的值并沒(méi)有改變。

func (p Person) growth() {  p.age++ }  var p = Person{ age: 25 } p.growth()

上面的代碼中,我們定義的 growth 方法,會(huì)修改傳入結(jié)構(gòu)體中的 age 值。但是實(shí)際結(jié)果和我們預(yù)期的不一樣。

var p = Person{ age: 25 }  p.growth() fmt.Println("age:", p.age)

 Go語(yǔ)言中如何使用結(jié)構(gòu)體

這是由于,傳入方法中的結(jié)構(gòu)體,是原結(jié)構(gòu)體復(fù)制后的值,需要修改原結(jié)構(gòu)體,就需要給方法傳入其指針。只需要在方法定義結(jié)構(gòu)體參數(shù)時(shí),加上 * 號(hào),表示變量 p  為結(jié)構(gòu)體指針。

func (p *Person) growth() {  p.age++ }

Go語(yǔ)言中如何使用結(jié)構(gòu)體

關(guān)于Go語(yǔ)言中如何使用結(jié)構(gòu)體就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)站題目:Go語(yǔ)言中如何使用結(jié)構(gòu)體
URL網(wǎng)址:http://weahome.cn/article/ipgohi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部