go 速學 - 11 - 結構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

目錄

    • 結構
      • 概念
      • 建立結構
      • 使用結構
      • 值傳遞
      • 匿名結構
      • 結構的組合
        • 概念
        • 定義一個組合
        • 使用組合

摘要

定義結構,使用結構,值傳遞與指標傳遞,匿名結構,結構的組合

結構

概念

  • Go 中沒有 class 的概念,結構可以完成類似功能
  • 支援指向自身的指標類型成員
  • 支援匿名結構
  • 支援 ==!= 運算子

建立結構

格式

type <Name> struct{}

type person struct {    name    string    age     int}

使用結構

結構變數的各個欄位都會有預設值

p1 := person{name: "Jack"}p1.name = "Peter"   //p1 {Peter 0}

值傳遞

參數中的結構預設為值傳遞

p2 := person{name: "Jack", age: 20}changeAge(p2)func changeAge(p person) {    p.age = 99    fmt.Println(p) //{Jack 99}}fmt.Println("p2", p2) //p2 {Jack 20}

可以通過使用指標改變原來的值

p2 := person{name: "Jack", age: 20}changeAge(p2)func changeAge2(p *person) {    p.age = 99    fmt.Println(p) //&{Jack 99}}fmt.Println("p2", p2) //p2 {Jack 99}

也可以在定義時直接使用指標

p3 := &person{name: "Andy"}

匿名結構

建立匿名結構

p4 := struct {    name string    age  int}

也可以在定義時直接進行初始化,但是初始化的最後不能少掉逗號

p4 := struct {    name string    age  int}{    name: "Joe",    age:  20, //不能少逗號}

結構中也可以包括匿名結構

type person struct {    name string    age  int    //匿名結構    address struct {        street string    }}

結構的組合

概念

由於 Go 沒有類和繼承的概念,所以要實作類別似功能,需要使用組合,即一個結構中包含另一個結構的變數

定義一個組合

type person struct {    name string    age  int}type student struct {    name string    no   int    person}

以上在 student 結構中組合了一個 person 結構,預設 student 會產生一個與此結構相同的成員,且組合的成員會直接添加到外部結構中。

使用組合

stu := student{name: "Andy", no: 20, person: person{name: "Tony", age: 20}}stu.person.age = 21stu.age = 22fmt.Println(stu) //{Andy 20 {Tony 22 }}stu.name = "A"stu.person.name = "B"fmt.Println(stu) //{A 20 {B 22 {}}}

以上 stu.person.agestu.age 實際操作的是同一變數,而 stu.person.namestu.name 則為不同變數。

即,外部結構不具備內部結構的某一成員時,外部結構直接使用該成員實際使用的是內部結構的成員。
當外部結構和內部結構有同名的成員時,外部結構使用的外部結構的成員,內部結構使用的是內部結構的成員。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.