亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

Go語言struct類型詳解

2020-04-01 19:24:44
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語言struct類型詳解,struct是一種數(shù)據(jù)類型,可以用來定義自己想的數(shù)據(jù)類型,需要的朋友可以參考下
 

struct

Go語言中,也和C或者其他語言一樣,我們可以聲明新的類型,作為其它類型的屬性或字段的容器。例如,我們可以創(chuàng)建一個(gè)自定義類型person代表一個(gè)人的實(shí)體。這個(gè)實(shí)體擁有屬性:姓名和年齡。這樣的類型我們稱之struct。如下代碼所示:

 

復(fù)制代碼代碼如下:

type person struct {
    name string
    age int
}

 

看到了嗎?聲明一個(gè)struct如此簡單,上面的類型包含有兩個(gè)字段。

1.一個(gè)string類型的字段name,用來保存用戶名稱這個(gè)屬性
2.一個(gè)int類型的字段age,用來保存用戶年齡這個(gè)屬性

如何使用struct呢?請看下面的代碼:

 

復(fù)制代碼代碼如下:

type person struct {
    name string
    age int
}

 

var P person  // P現(xiàn)在就是person類型的變量了

P.name = "Astaxie"  // 賦值"Astaxie"給P的name屬性.
P.age = 25  // 賦值"25"給變量P的age屬性
fmt.Printf("The person's name is %s", P.name)  // 訪問P的name屬性.

 

除了上面這種P的聲明使用之外,還有另外幾種聲明使用方式:

1.按照順序提供初始化值

復(fù)制代碼代碼如下:

P := person{"Tom", 25}

2.通過field:value的方式初始化,這樣可以任意順序
復(fù)制代碼代碼如下:

P := person{age:24, name:"Tom"}

3.當(dāng)然也可以通過new函數(shù)分配一個(gè)指針,此處P的類型為*person
復(fù)制代碼代碼如下:

P := new(person)

 

下面我們看一個(gè)完整的使用struct的例子

復(fù)制代碼代碼如下:

package main
import "fmt"

 

// 聲明一個(gè)新的類型
type person struct {
    name string
    age int
}

// 比較兩個(gè)人的年齡,返回年齡大的那個(gè)人,并且返回年齡差
// struct也是傳值的
func Older(p1, p2 person) (person, int) {
    if p1.age>p2.age {  // 比較p1和p2這兩個(gè)人的年齡
        return p1, p1.age-p2.age
    }
    return p2, p2.age-p1.age
}

func main() {
    var tom person

    // 賦值初始化
    tom.name, tom.age = "Tom", 18

    // 兩個(gè)字段都寫清楚的初始化
    bob := person{age:25, name:"Bob"}

    // 按照struct定義順序初始化值
    paul := person{"Paul", 43}

    tb_Older, tb_diff := Older(tom, bob)
    tp_Older, tp_diff := Older(tom, paul)
    bp_Older, bp_diff := Older(bob, paul)

    fmt.Printf("Of %s and %s, %s is older by %d years/n",
        tom.name, bob.name, tb_Older.name, tb_diff)

    fmt.Printf("Of %s and %s, %s is older by %d years/n",
        tom.name, paul.name, tp_Older.name, tp_diff)

    fmt.Printf("Of %s and %s, %s is older by %d years/n",
        bob.name, paul.name, bp_Older.name, bp_diff)
}

 

struct的匿名字段

我們上面介紹了如何定義一個(gè)struct,定義的時(shí)候是字段名與其類型一一對應(yīng),實(shí)際上Go支持只提供類型,而不寫字段名的方式,也就是匿名字段,也稱為嵌入字段。

當(dāng)匿名字段是一個(gè)struct的時(shí)候,那么這個(gè)struct所擁有的全部字段都被隱式地引入了當(dāng)前定義的這個(gè)struct。

讓我們來看一個(gè)例子,讓上面說的這些更具體化

復(fù)制代碼代碼如下:

package main
import "fmt"

 

type Human struct {
    name string
    age int
    weight int
}

type Student struct {
    Human  // 匿名字段,那么默認(rèn)Student就包含了Human的所有字段
    speciality string
}

func main() {
    // 我們初始化一個(gè)學(xué)生
    mark := Student{Human{"Mark", 25, 120}, "Computer Science"}

    // 我們訪問相應(yīng)的字段
    fmt.Println("His name is ", mark.name)
    fmt.Println("His age is ", mark.age)
    fmt.Println("His weight is ", mark.weight)
    fmt.Println("His speciality is ", mark.speciality)
    // 修改對應(yīng)的備注信息
    mark.speciality = "AI"
    fmt.Println("Mark changed his speciality")
    fmt.Println("His speciality is ", mark.speciality)
    // 修改他的年齡信息
    fmt.Println("Mark become old")
    mark.age = 46
    fmt.Println("His age is", mark.age)
    // 修改他的體重信息
    fmt.Println("Mark is not an athlet anymore")
    mark.weight += 60
    fmt.Println("His weight is", mark.weight)
}

 

圖例如下:

Go語言struct類型詳解

圖2.7 Student和Human的方法繼承

我們看到Student訪問屬性age和name的時(shí)候,就像訪問自己所有用的字段一樣,對,匿名字段就是這樣,能夠?qū)崿F(xiàn)字段的繼承。是不是很酷?。窟€有比這個(gè)更酷的呢,那就是student還能訪問Human這個(gè)字段作為字段名。請看下面的代碼,是不是更酷了。

復(fù)制代碼代碼如下:

mark.Human = Human{"Marcus", 55, 220}
mark.Human.age -= 1

 

通過匿名訪問和修改字段相當(dāng)?shù)挠杏?,但是不僅僅是struct字段哦,所有的內(nèi)置類型和自定義類型都是可以作為匿名字段的。請看下面的例子。

 

復(fù)制代碼代碼如下:

package main
import "fmt"

 

type Skills []string

type Human struct {
    name string
    age int
    weight int
}

type Student struct {
    Human  // 匿名字段,struct
    Skills // 匿名字段,自定義的類型string slice
    int    // 內(nèi)置類型作為匿名字段
    speciality string
}

func main() {
    // 初始化學(xué)生Jane
    jane := Student{Human:Human{"Jane", 35, 100}, speciality:"Biology"}
    // 現(xiàn)在我們來訪問相應(yīng)的字段
    fmt.Println("Her name is ", jane.name)
    fmt.Println("Her age is ", jane.age)
    fmt.Println("Her weight is ", jane.weight)
    fmt.Println("Her speciality is ", jane.speciality)
    // 我們來修改他的skill技能字段
    jane.Skills = []string{"anatomy"}
    fmt.Println("Her skills are ", jane.Skills)
    fmt.Println("She acquired two new ones ")
    jane.Skills = append(jane.Skills, "physics", "golang")
    fmt.Println("Her skills now are ", jane.Skills)
    // 修改匿名內(nèi)置類型字段
    jane.int = 3
    fmt.Println("Her preferred number is", jane.int)
}

 

從上面例子我們看出來struct不僅僅能夠?qū)truct作為匿名字段、自定義類型、內(nèi)置類型都可以作為匿名字段,而且可以在相應(yīng)的字段上面進(jìn)行函數(shù)操作(如例子中的append)。

這里有一個(gè)問題:如果human里面有一個(gè)字段叫做phone,而student也有一個(gè)字段叫做phone,那么該怎么辦呢?

Go里面很簡單的解決了這個(gè)問題,最外層的優(yōu)先訪問,也就是當(dāng)你通過student.phone訪問的時(shí)候,是訪問student里面的字段,而不是human里面的字段。

這樣就允許我們?nèi)ブ剌d通過匿名字段繼承的一些字段,當(dāng)然如果我們想訪問重載后對應(yīng)匿名類型里面的字段,可以通過匿名字段名來訪問。請看下面的例子。

 

復(fù)制代碼代碼如下:

package main
import "fmt"

 

type Human struct {
    name string
    age int
    phone string  // Human類型擁有的字段
}

type Employee struct {
    Human  // 匿名字段Human
    speciality string
    phone string  // 雇員的phone字段
}

func main() {
    Bob := Employee{Human{"Bob", 34, "777-444-XXXX"}, "Designer", "333-222"}
    fmt.Println("Bob's work phone is:", Bob.phone)
    // 如果我們要訪問Human的phone字段
    fmt.Println("Bob's personal phone is:", Bob.Human.phone)
}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美精品乱码久久久久久按摩| 97免费在线观看视频| 中文字幕亚洲色图| 色视频免费观看| 91高清在线| 在线观看不卡| 91精品国产一区二区三区动漫| 欧美日韩国产中文精品字幕自在自线| 国产精品视频观看| 国产成人精品三级高清久久91| 夜夜嗨av一区二区三区免费区| 伊人久久久久久久久久久| 朝桐光av一区二区三区| 久久久久无码国产精品不卡| 精品人伦一区二区三电影| 濑亚美莉vs黑人在线观看| 日韩欧美国产一区二区三区| 91天堂在线视频| 国产精品中文字幕在线| 国产成人久久精品77777综合| 欧美人狂配大交3d怪物一区| 国产欧美日韩精品在线| 福利视频亚洲| 四虎国产精品免费久久5151| 亚洲六月丁香色婷婷综合久久| 天堂在线资源8| 国产精品青青在线观看爽香蕉| 一区二区三区精品99久久| 在线观看日本一区二区| 日韩中文字幕视频在线观看| 蜜臀av性久久久久av蜜臀妖精| 色影视在线观看| 日本国产精品视频| 国产精品9999久久久久仙踪林| 日韩av成人在线| 国产精品视频免费| 欧美日韩国产a| 又黄又www| 波多野吉衣中文字幕| 国产成人在线视频免费观看| 国产精品扒开腿爽爽爽视频| 日韩在线观看不卡| 99视频超级精品| 国产一区免费| 波多野结衣办公室双飞| jizz性欧美10| 蜜桃久久精品成人无码av| 成年人视频网站| 97久久超碰精品国产| 亚洲深爱激情| 国产综合精品久久久久成人av| 99久久夜色精品国产网站| 天堂地址在线www| 视频国产一区二区三区| 天天综合天天干| 综合区小说区图片区在线一区| 亚洲国产高清高潮精品美女| a篇片在线观看网站| 在线观看 中文字幕| 精品久久不卡| 91亚洲精品一区二区乱码| 亚洲一区二区四区蜜桃| 欧美69xxxxx| 国产精品毛片久久久久久久久久99999999| 免费看日本黄色片| 精品在线视频一区二区三区| 被男人吃奶添下面好舒服动态图| 色aⅴ色av色av偷拍| 综合久久亚洲| 久久久综合av| 风间由美中文字幕在线看视频国产欧美| 欧美一级大片免费看| 50度灰在线| 免费影院在线观看一区| 亚洲二区在线播放视频| 国产精品一区二区无线| 3atv在线一区二区三区| 亚洲精品永久视频| 亚洲精品国产无天堂网2021| 欧美性受xxxx黑人猛交| 999久久久久久| 亚洲人亚洲人色久| 调教驯服丰满美艳麻麻在线视频| 成人福利免费网站| 久久精品夜夜夜夜久久| 国产精品区一区二| 独立日3在线观看完整版| 顶级嫩模精品视频在线看| 亚洲精品高清在线| 国产成人女人毛片视频在线| 国产精品国产三级国产专区51| 国产美女福利在线观看| 同性恋视频网站资源| 美女脱光衣服与内衣内裤一区二区三区四区| 亚洲第一区中文字幕| 亚洲国产日韩一区无码精品久久久| 自拍偷拍校园春色| 欧美中文在线免费| 一区二区免费在线播放| 一本大道久久a久久精二百| 亚洲美免无码中文字幕在线| 久久99热精品这里久久精品| 秋霞午夜av一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 麻豆changesxxx国产| 亚洲成人精品电影在线观看| 99久久er热在这里只有精品15| 日韩精品视频免费| 国产麻豆成人传媒免费观看| 日本最黄一级片免费在线| 国产精品主播视频| 日本我和搜子同居的日子高清在线| 福利精品视频| 亚洲高清乱码| 仙踪林久久久久久久999| 欧美日韩亚洲精品一区二区三区| 欧美午夜大胆人体| 精品少妇爆乳无码av无码专区| 天天操天天干天天| 久久久人人爽| 国产日韩欧美高清在线| 欧美一区二区在线观看视频| 久久九九热免费视频| 国产一区二区福利视频| 亚洲xxx在线观看| 日本三级电影网站| 男女羞羞网站| 伊人电影在线观看| 欧美肥老太太性生活| 久久久国产精品无码| 欧美成人精品一级| 国产精品久久久久久久久久精爆| 亚洲成人中文| 丝袜足脚交91精品| 亚洲欧美一区二区久久| 欧美黑白配在线| 成人免费高清完整版在线观看| 欧美jizzhd精品欧美巨大免费| 久久免费影院| 成功精品影院| 天堂av免费看| 69精品视频| 性中国xxx极品hd| 91在线丨porny丨国产| 午夜小视频福利在线观看| 400部精品国偷自产在线观看| 一区二区三区韩国| 国产免费不卡| 久久婷婷综合激情| 日韩免费观看视频| 8x国产一区二区三区精品推荐| 在线中文字幕第一页| 97色在线播放视频| 黑人40厘米全进去| 欧美亚洲国产日韩| 狼狼综合久久久久综合网| 免费在线成人激情电影| 日韩精品欧美成人高清一区二区| 久久精品女人毛片国产| 成人欧美一区二区三区黑人一| 国产无遮挡又黄又爽又色| 久操国产精品| 殴美一级黄色片| 国产综合色在线视频区| 久久国产精品亚洲77777| 五月婷婷丁香色| 欧美成人精品三级在线观看| 羞羞网www| 日韩精品导航| 中文字幕一区二区三区精彩视频| 性感小视频在线看免费| 亚洲免费大片在线观看| 久久久国产精品午夜一区ai换脸| 亚洲无人区码一码二码三码的含义| 最新中文字幕在线| 国产成人精品综合久久久久99| 夜夜操夜夜骑| 尤物yw午夜国产精品视频| 91国偷自产一区二区三区成为亚洲经典| 亚洲久久在线| 日韩三级在线观看| 欧美视频一二区| 伊人夜夜躁av伊人久久| 欧美三级午夜理伦三级老人| 亚洲一区二区在线视频| 一区二区在线观看视频| 欧美日韩不卡一区| 日韩午夜视频在线观看| 一级片中文字幕| 久久成人小视频| 国产又白又嫩又紧又爽18p| 99久久夜色精品国产亚洲狼| 在线你懂的视频| 9999精品免费视频| 亚洲男人的天堂网站| 亚洲一区二区在线免费观看| 美媛馆国产精品一区二区| 欧美三区在线观看| 特级黄色录像片| 亚洲女人初尝黑人巨大| 天堂在线精品| 天堂色在线视频| 日本黄色免费网址| 中国av免费看| 91tv精品福利国产在线观看| 日日夜夜免费精品视频| 一区二区三视频| 国产日韩欧美视频在线观看| 国产精品伦理在线| 精品国产av鲁一鲁一区| 三级资源在线| 国产精品一区视频| 91大神xh98hx在线播放| 欧美激情 一区| 国产精品久久91| 91黑人精品一区二区三区| 日韩精品一区二区亚洲av观看| 欧美黑人xxxⅹ高潮交| 68精品久久久久久欧美| 韩日在线播放| 91久久精品一区二区二区| 日韩在线免费视频| 欧美成人禁片在线www| 久久亚洲精精品中文字幕早川悠里| www.色精品| 精品国产第一福利网站| 亚洲а∨精品天堂在线| 天天干天天色天天爽| 欧美亚洲国产日本| 亚洲成av人影院| 91热福利电影| 88xx成人免费观看视频库| 欧美肥婆姓交大片| 日韩在线观看免费全| 欧美极品美女视频网站在线观看免费| 久久激情电影| 欧美大人香蕉在线| 男人的天堂在线免费视频| 国产精品xxxxxx| 免费av片风间由美在线| 亚洲一区视频在线播放| 18涩涩午夜精品.www| 岛国av一区二区在线在线观看| 国产特级黄色大片| 日韩在线视频观看正片免费网站| 色老汉一区二区三区| 87福利电影网| 欧美黑人ⅹxxx另类猛交| 91麻豆精品91久久久久久清纯| 欧美日韩不卡视频| 国产高清在线视频| 日韩理论电影中文字幕| 欧美中文字幕久久| 337p日本欧洲亚洲大胆张筱雨| 欧美aaa在线| 色女人在线视频| 久久中文字幕一区二区| 一二三四视频在线中文| 福利一区福利二区微拍刺激| 日本久久高清视频| 日本电影一区二区| 亚洲在线第一页| 亚洲精一区二区三区| 一区二区三区的久久的视频| 婷婷丁香综合网| 日韩激情视频在线| 亚洲第一在线综合网站| 欧美在线色视频| 亚洲成a人片77777在线播放| 国产高清日韩| 在线碰免费视频在线观看| 一区二区视频国产| 欧美高清一级片| 制服.丝袜.亚洲.另类.中文| 日韩久久久久久久久久久久久| 免费精品视频一区二区三区| 国产无套粉嫩白浆在线2022年| 国产精品久久久久久久久久久免费看| 午夜精品一区二区三区四区| 污网站免费看| 91视频这里只有精品| 99在线视频播放| 91极品尤物在线播放国产| 爱福利在线视频| 精品一区二区三区在线观看国产| 免费精品视频最新在线| 久久精品国产www456c0m| 欧美日韩精品久久久免费观看| 欧美性猛交xxxx乱| 日本天堂免费a| 在线中文字幕-区二区三区四区| 欧美日韩在线观看免费| 欧美色网站导航| 久久国产香蕉视频| 久久人妻一区二区| 九色视频在线观看免费| 日本手机在线视频| 国产成人精品www牛牛影视| 美女裸体自慰在线观看| 高清在线观看免费| 含羞草www国产在线视频| www.成人精品免费网站青椒| 天堂网在线观看视频| 91在线直播亚洲| 国产小视频免费在线观看| av动漫免费看| 北条麻妃在线观看视频| 欧美日韩一区二区三区在线| 国产高清视频一区| 国精产品乱码一区一区三区四区| 在线不卡中文字幕| 日韩经典av| 亚洲黄色影片| 欧美一区二区女人| 色中色综合影院手机版在线观看| 欧美午夜女人视频在线| 欧美大胆成人| 国产精品电影一区| 激情五月激情综合| 日韩免费精品视频| 亚洲2020天天堂在线观看| 97精品高清一区二区三区| 特级西西444www大精品视频免费看| 小泽玛利亚视频在线观看| 国产亚洲成av人在线观看导航| 春暖花开成人亚洲区| 欧美精品一区二区三区免费| 国产一区电影|