溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

go語言中struct結(jié)構(gòu)體的使用

發(fā)布時(shí)間:2020-07-28 13:55:33 來源:網(wǎng)絡(luò) 閱讀:533 作者:qq5c9c828bc8d4b 欄目:編程語言

一、struct的特點(diǎn)

  • 1、用來自定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)
  • 2、struct里面可以包含多個(gè)字段(屬性)
  • 3、struct類型可以定義方法,注意和函數(shù)的區(qū)分
  • 4、struct類型是值類型
  • 5、struct類型可以嵌套
  • 6、GO語言沒有class類型,只有struct類型

二、struct的定義

1、struct聲明:

type 標(biāo)識(shí)符 struct {
    Name string
    Age int
    Score int
}

2、struct 中字段訪問:和其他語言一樣,使用點(diǎn)
例子

type Student struct {
    Name string
    Age int
    Score int
}

func main(){
    var stu Student
    stu.Name = "lilei"
    stu.Age = 22
    stu.Score = 20
    fmt.Printf("name=%s age=%d score=%d",stu.Name,stu.Age,stu.Score)
}

3、struct定義的三種形式:
a:   var stu Student
b:  var stu Student = new(Student)
c:  var stu
Student = &Student{}
(1)其中b和c返回的都是指向結(jié)構(gòu)體的指針,訪問形式如下
stu.Name、stu.Age和stu.Score 或者(stu).Name、(stu).Age、(*stu).Scroe

三、struct的初始化

1、struct的內(nèi)存布局:struct中的所有字段在內(nèi)存是連續(xù)的,布局如下:

type Rect1 struct { Min, Max point}
type Rect2 struct { Min, Max *point}

2、鏈表定義
type School struct {
    Name School
    Next *School
}

每個(gè)節(jié)點(diǎn)包含下一個(gè)節(jié)點(diǎn)的地址,這樣把所有的節(jié)點(diǎn)串起來,通常把鏈表的第一個(gè)節(jié)點(diǎn)叫做鏈表頭

3、雙鏈表定義
type School struct {
    Name string
    Next *School
    Prev *School
}

如果有兩個(gè)指針分別指向前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn)叫做雙鏈表。

4、二叉樹定義

type School struct {
Name string
Left School
Right
School
}
如果每個(gè)節(jié)點(diǎn)有兩個(gè)指針分別用來指向左子樹和右子樹,我們把這樣的結(jié)構(gòu)叫做二叉樹

四、特殊自處

1、結(jié)構(gòu)體是用戶單獨(dú)定義的類型,不能和其他類型進(jìn)行強(qiáng)制轉(zhuǎn)換
2、golang中的struct沒有構(gòu)造函數(shù),一般可以使用工廠模式來解決這個(gè)問題
package model
type student struct {
  Name string
  Age int
}
 func NewStudent(name string,age int) *student {
  return &student{
    Name:name,
    Age:age,
  }
}
package main
S := new(student)
S := model.NewStudent("tom",20)
3、我們可以為struct中的每個(gè)字段,寫上一個(gè)tag。這個(gè)tag可以通過反射的機(jī)制獲取到,最常用的場(chǎng)景就是json序列化和反序列化。
type student struct {
  Name string `json="name"`
  Age string `json="age"`
}
4、結(jié)構(gòu)體中字段可以沒有名字,即匿名字段
type Car struct {
  Name string
  Age int
}

type Train struct {
  Car
  Start time.Time
  int
}
5、匿名字段的沖突處理
type Car struct {
  Name string
  Age int
}
type Train struct {
  Car
  Start time.Time
  Age int
}

type A struct {
  a int
}
type B struct {
  a int
  b int
}
type C struct {
  A
  B
}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI