91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Go語言中如何使用結構體

發布時間:2021-07-20 15:31:42 來源:億速云 閱讀:179 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Go語言中如何使用結構體,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

結構體

結構體是 go 語言中一個比較重要的概念,在 c  語言中也有類似的東西。由于他們沒有類的概念,結構體可以簡單理解成類,是一個不同類型的數據構成的一個集合。集合中不同類型的數據被稱為成員,每個成員都要自己不同的類型,可以理解為  js 中對象的每個屬性。

聲明結構體

結構體通過 type 和 struct 關鍵字進行聲明,type 后接結構體的名字,struct 后接結構體每個成員的定義。

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

上面代碼有點類似于其他語言中接口的定義,實際上,go 也支持定義接口,我們只需要將 struct 關鍵字替換成 interface  就表示定義接口。

初始化結構體

初始化結構體有兩種方式,一種是通過字面量的方式,用結構體名稱加上結構體各個成員值的方式進行初始化。用上面的 Person 結構體舉例:

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

 Go語言中如何使用結構體

這種方式需要每個值按照結構體成員定義時的順序進行初始化,當然,也可以通過鍵值對的方式,打亂其順序。這種方式可以對部分成員進行省略,省略的部分會根據其類型,取該類型的空值。

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

如果要訪問結構體成員,可以通過 . 操作符,這與其他語言取對象屬性的方式一致。這里我們使用 p.age 的方式獲取了結構體 p 的成員 age  的值。

Go語言中如何使用結構體

除了字面量的方式初始化,結構體還可以通過 new 關鍵字進行初始化。

var p = new(Person)

通過該方式初始化的結構體有兩個特點:

  • new 關鍵字返回的為結構體指針;

  • new 關鍵字返回的結果每個成員都是空值;

所以,我們通過 new 初始化結構體的時候,取值的時候需要加 * 號。

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

如果直接在控制臺打印變量 p,會發現前面有個 &,表示這是一個指針。

Go語言中如何使用結構體

匿名結構體

結構體和函數一樣也可以定義一個沒有名字的結構體,就是在定義結構體的同時進行初始化,并且省略 type 關鍵字和結構體名稱。

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

方法

結構體只能定義一個個成員,而且成員都是基礎類型,想要實現類似 OOP  中類的概念,還需要為結構體提供方法。實際上,我們可以為結構體指定方法,只需要在定義函數的函數名前面加上結構體名,就能定義該函數為結構體的方法。

我們為之前的 Person 結構體定義一個 sayHello 的方法。

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

調用結構體方法的方式,和取結構體成員的值一樣,也需要通過 . 操作符。

Go語言中如何使用結構體

在 goland 的 Structure 中,能看到 Person 結構體是包含 sayHello  方法的,說明方法的定義即使不在結構體內,這個方法也是屬于該結構體的。

Go語言中如何使用結構體

方法中的指針

有時候,我們調用方法的同時,需要修改結構體中一些成員的值,會發現原結構體的值并沒有改變。

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

上面的代碼中,我們定義的 growth 方法,會修改傳入結構體中的 age 值。但是實際結果和我們預期的不一樣。

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

 Go語言中如何使用結構體

這是由于,傳入方法中的結構體,是原結構體復制后的值,需要修改原結構體,就需要給方法傳入其指針。只需要在方法定義結構體參數時,加上 * 號,表示變量 p  為結構體指針。

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

Go語言中如何使用結構體

關于Go語言中如何使用結構體就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

青州市| 湛江市| 武陟县| 长治市| 宁阳县| 武安市| 理塘县| 文水县| 开平市| 昌江| 柘城县| 金秀| 绩溪县| 淳化县| 台湾省| 遵化市| 阿巴嘎旗| 建阳市| 鄄城县| 大冶市| 梅州市| 汉川市| 永康市| 长海县| 白水县| 墨脱县| 崇仁县| 晋州市| 布拖县| 高邮市| 天峻县| 鄄城县| 内丘县| 梁山县| 社会| 凌云县| 神池县| 蒙自县| 永嘉县| 定结县| 甘孜|