成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 語(yǔ)言的結(jié)構(gòu)體與方法

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

[[394248]]

結(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è)成員的定義。

  1. type Person struct { 
  2.   name string 
  3.  age int 
  4.   gender string 
  5.   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)體舉例:

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

 

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

  1. var p = Person{ 
  2.   name"Shenfq"
  3.   address: "湖南長(zhǎng)沙"
  4.  
  5. fmt.Println("Person:", p) 
  6. fmt.Println("Person.age:", p.age) 

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

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

  1. 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)。

  1. var p = new(Person) 
  2. p.name = "Shenfq" 
  3. p.age = 18 
  4. p.gender = "男" 
  5. p.address = "湖南長(zhǎng)沙" 
  6.  
  7. fmt.Println("Person:", p) 

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

匿名結(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)。

  1. var p = struct { 
  2.   name string 
  3.   age int 
  4.   gender string 
  5.   address string 
  6. } { "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 的方法。

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

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

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

方法中的指針

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

  1. func (p Person) growth() { 
  2.  p.age++ 
  3.  
  4. var p = Person{ age: 25 } 
  5. p.growth() 

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

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

 

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

  1. func (p *Person) growth() { 
  2.  p.age++ 

 

責(zé)任編輯:姜華 來(lái)源: 自然醒的筆記本
相關(guān)推薦

2023-07-29 15:03:29

2020-12-02 08:45:36

Go語(yǔ)言

2020-11-30 06:17:03

Go語(yǔ)言

2020-11-26 06:40:24

Go語(yǔ)言基礎(chǔ)

2020-11-23 08:54:14

Go語(yǔ)言結(jié)構(gòu)體

2020-12-02 09:10:22

Go結(jié)構(gòu)數(shù)據(jù)類(lèi)型

2024-02-27 09:39:07

C語(yǔ)言cJSON開(kāi)發(fā)

2021-11-15 06:56:46

Go語(yǔ)言Tag

2022-09-18 23:09:13

Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)

2009-08-14 11:05:28

C#語(yǔ)言的結(jié)構(gòu)體

2021-11-02 12:19:18

Go函數(shù)結(jié)構(gòu)

2023-11-21 08:03:43

語(yǔ)言架構(gòu)偏移量

2014-02-10 15:05:37

C語(yǔ)言封裝

2024-10-16 09:57:52

空結(jié)構(gòu)體map屬性

2021-12-20 07:59:07

Go語(yǔ)言結(jié)構(gòu)體

2020-07-21 15:20:20

語(yǔ)言結(jié)構(gòu)體共用體

2021-07-30 07:28:15

WorkerPoolGo語(yǔ)言

2021-04-13 07:58:42

Go語(yǔ)言函數(shù)

2021-04-07 09:02:49

Go 語(yǔ)言變量與常量

2020-12-20 09:59:13

Go語(yǔ)言基礎(chǔ)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美夜夜| 亚州精品天堂中文字幕 | 国产色| 亚洲精品久久久久久宅男 | 国产一区精品在线 | av男人的天堂在线 | 天天影视网天天综合色在线播放 | 国产精品99久久久久久久久久久久 | 久草视频在线播放 | 欧美在线视频一区二区 | 中文二区 | 国产精品久久久久久久久久久免费看 | 色综合久久天天综合网 | 久久久精品国产 | 中文字幕一区在线 | 人人干在线 | 亚洲电影一级片 | 97国产精品视频人人做人人爱 | 中文字幕精品一区二区三区精品 | 日韩午夜网站 | 久久精品久久久久久 | 一道本视频 | 在线观看日本高清二区 | 精品视频网| 日韩中文字幕在线不卡 | 丁香久久 | 亚洲精品一区中文字幕乱码 | 成人网址在线观看 | 九九热精品在线视频 | 日韩视频区 | 国产成人在线看 | 一级片成人 | 神马影院一区二区三区 | 日韩国产在线 | 日本一区二区不卡视频 | 国产乱精品一区二区三区 | 亚洲国产免费 | 羞视频在线观看 | 毛片免费看 | 国产成人精品一区二三区在线观看 | 国产精品日韩欧美一区二区 |