青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2017年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234


專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
------------------------------------
Openresty 官方模塊
Openresty 標(biāo)準(zhǔn)模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺尊重!!如為您帶來不便,請(qǐng)于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊(cè)

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 221316
  • 排名 - 117

最新評(píng)論

閱讀排行榜

http://www.jb51.net/article/56788.htm

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呢?請(qǐng)看下面的代碼:

 

復(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í)候是字段名與其類型一一對(duì)應(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"}

    // 我們?cè)L問相應(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)
    // 修改對(duì)應(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)
}

 

圖例如下:

圖2.7 Student和Human的方法繼承

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

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

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

 

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

 

復(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)然如果我們想訪問重載后對(duì)應(yīng)匿名類型里面的字段,可以通過匿名字段名來訪問。請(qǐ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)
}

 

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣魃鐓^(qū),廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入社區(qū)

相關(guān)文章
posted on 2017-05-04 10:29 思月行云 閱讀(177) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Golang
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品一区二区尤物区| 国产精品亚洲综合一区在线观看| 在线亚洲一区| 欧美一区二区黄| 亚洲美女黄网| 久久er精品视频| 欧美日本国产精品| 国内免费精品永久在线视频| 亚洲美女毛片| 久久国产一区二区三区| 亚洲国产一区二区精品专区| 黄色免费成人| 亚洲一区日韩在线| 免费不卡在线观看av| 一区二区三区产品免费精品久久75| 翔田千里一区二区| 欧美日韩亚洲国产一区| 伊人婷婷欧美激情| 亚洲欧美综合| 亚洲国产一区二区精品专区| 欧美一级二区| 欧美三级网址| 亚洲人体偷拍| 久久久久久**毛片大全| 一区二区三区欧美激情| 欧美va亚洲va香蕉在线| 国产偷国产偷精品高清尤物| 一二美女精品欧洲| 欧美电影免费观看高清| 欧美亚洲综合网| 欧美在线亚洲| 亚洲人线精品午夜| 欧美激情一区二区| 欧美在线你懂的| 国产精品三级视频| 一二美女精品欧洲| 亚洲成人在线视频网站| 久久成人国产精品| 欧美国产日本| 欧美在线啊v一区| 国产精品久久久久久久久久久久久久| 在线日韩av片| 久久网站热最新地址| 亚洲欧美另类国产| 国产精品成人午夜| 亚洲视频在线看| 亚洲精品乱码久久久久久日本蜜臀 | 最新国产拍偷乱拍精品| 久久久亚洲精品一区二区三区| 国产日韩精品一区二区三区在线| 亚洲一区二区三区乱码aⅴ| 亚洲三级影院| 欧美成人午夜免费视在线看片| 欧美久久综合| 日韩天天综合| 欧美精品日韩三级| 亚洲国产高清自拍| 美女图片一区二区| 久久久久久久久伊人| 精品动漫av| 免费成人黄色| 欧美亚洲综合久久| 一本一本大道香蕉久在线精品| 欧美精品在线一区二区三区| 日韩亚洲欧美成人一区| 亚洲高清在线播放| 欧美激情va永久在线播放| 亚洲日本黄色| 亚洲精品乱码久久久久久日本蜜臀| 欧美高清视频一区二区| 亚洲美女视频在线观看| 亚洲精品国产欧美| 欧美日韩亚洲激情| 亚洲欧美一区二区激情| 午夜免费日韩视频| 国外成人性视频| 欧美成人69| 欧美电影免费| 中日韩高清电影网| 亚洲午夜在线视频| 国产欧美在线观看| 免费成人小视频| 欧美福利一区二区| 亚洲自拍偷拍福利| 香蕉亚洲视频| 亚洲福利视频在线| 午夜精品久久久久久99热| 欧美一区二区精美| 一区二区亚洲| 亚洲日韩中文字幕在线播放| 欧美视频日韩视频| 久久精品免费| 免费亚洲一区二区| 在线视频亚洲| 午夜欧美大片免费观看| 伊人久久综合97精品| 亚洲国产综合91精品麻豆| 欧美色欧美亚洲另类七区| 午夜精品福利视频| 久久久久久久97| 一本久久综合亚洲鲁鲁| 亚洲自拍16p| 亚洲国产精品第一区二区三区| 亚洲国产经典视频| 国产精品日韩在线播放| 欧美1区2区| 欧美午夜精品理论片a级大开眼界| 久久激情网站| 欧美高清在线观看| 欧美一区二区三区视频在线| 麻豆成人小视频| 亚洲综合欧美| 麻豆精品视频| 欧美亚洲一区| 欧美精品1区2区3区| 欧美一区二区三区免费看| 蜜乳av另类精品一区二区| 国产在线视频欧美| 亚洲人成毛片在线播放| 国产日韩精品在线| 亚洲日本在线视频观看| 国产自产v一区二区三区c| 亚洲精品中文字| 狠狠色丁香婷综合久久| 一本大道久久a久久综合婷婷| 欧美一区二区三区另类| 国产日韩欧美在线视频观看| 亚洲激情专区| 国产欧美一区二区精品忘忧草| 亚洲国产二区| 国产在线成人| 中文久久精品| 亚洲精品三级| 亚洲欧美成人在线| 亚洲欧美激情精品一区二区| 亚洲美女视频网| 久久久久免费| 欧美在线视频一区| 欧美日韩免费区域视频在线观看| 另类人畜视频在线| 国产麻豆精品theporn| 亚洲乱亚洲高清| 最新成人av在线| 久久精品国产免费| 午夜一级在线看亚洲| 欧美母乳在线| 欧美激情第1页| 狠狠色综合网| 午夜一区在线| 午夜激情久久久| 欧美日韩在线看| 亚洲综合另类| 欧美日产国产成人免费图片| 欧美国产丝袜视频| 精品不卡在线| 欧美一级大片在线观看| 午夜在线播放视频欧美| 欧美婷婷六月丁香综合色| 亚洲精品久久久久久久久| 亚洲黄色一区二区三区| 午夜精品久久99蜜桃的功能介绍| 免费精品99久久国产综合精品| 久久综合中文色婷婷| 国产一区亚洲一区| 欧美一区91| 久久精品国产免费观看| 国产欧美一区二区色老头| 亚洲一区免费视频| 亚洲免费一级电影| 国产精品美女黄网| 亚洲午夜女主播在线直播| 亚洲欧美99| 国产精品嫩草影院一区二区| 亚洲小说区图片区| 亚洲欧美日韩中文播放| 国产精品人人做人人爽| 亚洲在线一区二区三区| 久久久久久高潮国产精品视| 亚洲欧美日本国产有色| 国产精品国产三级国产普通话99| 日韩视频―中文字幕| 亚洲性视频网址| 国产精品卡一卡二卡三| 亚洲欧美一区二区三区久久 | 亚洲欧美网站| 久久亚洲午夜电影| 欧美国产精品一区| 日韩天堂av| 国产精品sm| 亚洲欧美日韩另类| 久久露脸国产精品| 亚洲国产高清在线| 欧美激情一区三区| 一区二区欧美国产| 欧美在线电影| 午夜在线精品偷拍| 亚洲综合色噜噜狠狠| 国产精品主播| 久久久久国产精品www| 亚洲第一在线综合网站|