go - struct類型

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

1. 概述
  與C語言struct一樣,與java/php等class類似,在Go中,用於擴充類型,物件導向編程(本部分暫未做詳細介紹)等
  聲明格式:(是類型的組合)
  type typeName struct {    //...  }

2. 聲明及初始化

  方法有幾種:
  var varName typeName             //①  varName := new(typeName)         //②  varName := typeName{[初始化值]}  //③  varName := &typeName{[初始化值]} //④
  注: ①③返回 typeName 類型變數;②④返回 *typeName 類型變數;③④[]可省略;若無初始化值,則預設為零值
  初始化值可以分為兩種: 
  a. 有序: typeName{value1, value2, ...} 必須一一對應
  b. 無序: typeName{field1:value1, field2:value2, ...} 可初始化部分值
  例:
  type Person struct {    name string    age int  }  p := Person{"James", 23}  //有序  p := Person{age:23}       //無序
3. 操作
  聲明的struct與普通類型一樣
  訪問結構體中的一個變數名, 用 "." 來串連:
  varName.field
  如操作上面 Person 結構體中的 age : p.age = 35
  也可以作為函數中的參數,傳回值類型

  如: 

func funcName(varName1 typeName2[,varName2 typeName2, ...]) typeName {...}

example code list

package mainimport "fmt"//1. 聲明一個自訂類型名為 Person 的結構體type Person struct {name stringage int}func main() {//2. 初始化var p1 Personp2 := Person{}p3 := Person{"James", 23}p4 := Person{age:23}fmt.Println(p1, p2, p3, p4)p5 := new(Person)p6 := &Person{}p7 := &Person{"James", 23}p8 := &Person{age:23}fmt.Println(p5, p6, p7, p8)/*********************************//*print result                   *//*{ 0} { 0} {James 23} { 23}     *//*&{ 0} &{ 0} &{James 23} &{ 23} *//*********************************///3. 操作p1.age = 50p2.age = 25if compareAge(p1, p2) {fmt.Println("p1 is older than p2")} else {fmt.Println("p2 is older than p1")}/*********************************//*print result                   *//*p1 is older than p2            *//*********************************/}func compareAge(p1, p2 Person) bool {if p1.age > p2.age {return true}return false}

4. 匿名欄位

  聲明一個 struct1 可以包含已經存在的 struct2 或者go語言中內建類型作為內建欄位,稱為匿名欄位,即唯寫了 typeName,無 varName,但是 typeName 不能重複
  匿名欄位與物件導向程式語言中的繼承
  4.1 聲明及初始化:
  如:
  type Person struct {    name string    age int    addr string  }  type Employee struct {    Person          //匿名欄位    salary int    int             //用內建類型作為匿名欄位    addr string     //類似於重載  }  em1 := Employee{Person{"rain", 23, "qingyangqu"}, 5000, 100, "gaoxingqu"}
  4.2 操作
  訪問方式也是通過 "." 來串連
  相同欄位採用最外層優先訪問,類似於重載
  em1.addr 訪問的是 Employee 中最外層的 addr
  em1.Person.addr 訪問的是 Employee 中 Person 中的 addr


example code list

package mainimport "fmt"type Person struct {name stringage intaddr string}type Employee struct {Person          //匿名欄位salary intint             //用內建類型作為匿名欄位addr string     //類似於重載}func main() {/*var em1 Employee = Employee{}em1.Person = Person{"rain", 23, "qingyangqu"}em1.salary = 5000em1.int = 100 //使用時注意其意義,此處無em1.addr = "gaoxingqu"*///em1 := Employee{Person{"rain", 23, "qingyangqu"}, 5000, 100, "gaoxingqu"}//初始化方式不一樣,但是結果一樣em1 := Employee{Person:Person{"rain", 23, "qingyangqu"}, salary:5000, int:100, addr:"gaoxingqu"}fmt.Println(em1)/******************************************************//*print result                                        *//*{{rain 23 qingyangqu} 5000 100 gaoxingqu}           *//******************************************************/fmt.Println("live addr(em1.addr) = ", em1.addr)fmt.Println("work addr(em1.Person.addr) = ", em1.Person.addr)em1.int = 200  //修改匿名欄位的值/******************************************************//*print result                                        *//*live addr(em1.addr) =  gaoxingqu                    *//*work addr(em1.Person.addr) =  qingyangqu            *//******************************************************/}


還有很多關於struct物件導向的知識,後面再學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.