16 Golang結(jié)構(gòu)體詳解(二)

結(jié)構(gòu)體方法和接受者

在go中,沒有類的概念但是可以給類型(結(jié)構(gòu)體、自定義類型)定義方法。所謂方法就是定義了接受者的函數(shù)榆苞。接受者的概念類似于其他語言中的this或self。

  • 方法的定義格式
func (接受者變量 接受者類型) 方法名(參數(shù)列表) (返回參數(shù)) {
    函數(shù)體
}
  • 結(jié)構(gòu)體是值類型
type Person struct {
    name string
    age int 
    sex string
}
func main(){
    var p1 = Person {
        name:"哈哈",
        age:20,
        sex:"男",
    }
    p2 := p1
    fmt.Println(p1 == p2) // true
    p2.Name = "李四"
    fmt.Printf("%v %v", p2, p1) //{李四 20 男} {哈哈 20 男}
}
  • 接收者類型可以是指針類型和非指針類型
type Person struct {
    name string
    age int8
    sex string
    height int8
}

func (p Person) PrintInfo () {
    fmt.Printf("姓名:%v 年齡:%v\n", p.name, p.age)
}

//接收的結(jié)構(gòu)體必須是結(jié)構(gòu)體的指針霞捡,才能在內(nèi)部修改其屬性
func (p *Person) SetInfo (name string, age int8){
    p.name = name
    p.age = age
}

func main(){
    var p1 = Person{
        name:"張三",
        age:20,
        sex:"男",
    }
    p1.PrintInfo()
    //姓名:張三 年齡:20
    var p2 = Person{
        name:"李四",
        age:30,
        sex:"男",
    }
    p2.PrintInfo()
    //姓名:李四 年齡:30
    p1.PrintInfo()
    //姓名:張三 年齡:20
    
    p1.SetInfo("李四", 34)
    p1.PrintInfo()
    //姓名:李四 年齡:34

}
  • 給任意類型添加方法

在go中坐漏,接收者的類型可以是任何類型,不僅僅是結(jié)構(gòu)體碧信,任何類型都可以擁有方法

type MyInt int

func (m MyInt) printInfo() {
    fmt.Println("我是自定義類型中的自定義方法")
}

func main() {
    var a MyInt = 20
    a.printInfo()
}
  • 結(jié)構(gòu)體的匿名字段

結(jié)構(gòu)體允許其成員字段在聲明時(shí)沒有字段名赊琳,而只有類型,這種沒有名字的字段就稱為匿名字段砰碴。因?yàn)閷㈩愋兔鳛樽侄蚊锓ぃ幸竽涿Y(jié)構(gòu)體的類型必須唯一。

type Person struct {
    string
    int
}

func main() {
    p := Person {
        "張三",
        20,
    }
    fmt.Println(p) //{張三 20}
}

結(jié)構(gòu)體的字段類型可以是基本數(shù)據(jù)類型衣式、切片寸士、Map以及結(jié)構(gòu)體

type Person struct {
    name string
    age int
    hobby []string
    map1 map[string]string
}

func main() {
    var p Person
    p.name = "張三"
    p.age = 20
    p.hobby = make([]string, 3, 6)
    p.hobby[0] = "吃飯"
    p.hobby[1] = "睡覺"
    p.hobby[2] = "打豆豆"
    p.map1 = make(map[string]string)
    p.map1["address"] = "北京"
    p.map1["phone"] = "139123123123"
    fmt.Printf("%#v\n", p)
    //main.Person{name:"張三", age:20, hobby:[]string{"吃飯", "睡覺", "打豆豆"}, map1:map[string]string{"address":"北京", "phone":"139123123123"}}
    fmt.Printf("%v", p.hobby)//[吃飯 睡覺 打豆豆]
}

%v前面加#代表輸出結(jié)構(gòu)體的所有實(shí)例

如果結(jié)構(gòu)體的字段類型是指針、slice和map的零值都是nil碴卧,即未分配空間。如果需要使用這樣的字段乃正,需要先make才能使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末住册,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓮具,更是在濱河造成了極大的恐慌荧飞,老刑警劉巖凡人,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叹阔,居然都是意外死亡挠轴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門耳幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事脯爪“欤” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵店印,是天一觀的道長冈在。 經(jīng)常有香客問我,道長按摘,這世上最難降的妖魔是什么包券? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮炫贤,結(jié)果婚禮上兴使,老公的妹妹穿的比我還像新娘。我一直安慰自己照激,他們只是感情好发魄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俩垃,像睡著了一般励幼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上口柳,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天苹粟,我揣著相機(jī)與錄音,去河邊找鬼跃闹。 笑死嵌削,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的望艺。 我是一名探鬼主播苛秕,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼找默!你這毒婦竟也來了艇劫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤惩激,失蹤者是張志新(化名)和其女友劉穎店煞,沒想到半個(gè)月后蟹演,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顷蟀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年酒请,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣个。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羞反,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毛萌,到底是詐尸還是另有隱情苟弛,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布阁将,位于F島的核電站膏秫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏做盅。R本人自食惡果不足惜缤削,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吹榴。 院中可真熱鬧亭敢,春花似錦、人聲如沸图筹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽远剩。三九已至扣溺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓜晤,已是汗流浹背锥余。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痢掠,地道東北人驱犹。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像足画,于是被迫代替她去往敵國和親雄驹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容