<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go語(yǔ)言基礎(chǔ)之結(jié)構(gòu)體(夏日篇)

          共 2573字,需瀏覽 6分鐘

           ·

          2022-01-11 18:43

          點(diǎn)擊上方“Go語(yǔ)言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語(yǔ)言”即可獲贈(zèng)從入門(mén)到進(jìn)階共10本電子書(shū)

          別有幽愁暗恨生,此時(shí)無(wú)聲勝有聲。

          前言

          Hey,大家好呀,我是星期八,上文講述了引入了一些結(jié)構(gòu)體的知識(shí)。

          但是我們知道Go是通過(guò)結(jié)構(gòu)體模仿對(duì)象的,一起來(lái)看看吧。


          引言

          在Go中,我們是沒(méi)有類(lèi)這個(gè)概念的,但是我們有結(jié)構(gòu)體呀~

          Go中的結(jié)構(gòu)體,就相當(dāng)于其他語(yǔ)言的類(lèi),基本能實(shí)現(xiàn)和其他語(yǔ)言一摸一樣的操作。


          構(gòu)造函數(shù)

          構(gòu)造函數(shù),跟其他語(yǔ)言一樣了,官方理解就是在類(lèi)實(shí)例化時(shí)執(zhí)行的方法,通常用于賦值操作。

          但是在Go中,可能不是太一樣,需要獨(dú)立用到一個(gè)函數(shù)完成。

          結(jié)構(gòu)體

          type Student struct {    Name  string    Age   int    phone string}

          構(gòu)造函數(shù)

          func NewStudent(name string, age int, phone string) *Student {    return &Student{Name: name, Age: age, phone: phone}}//函數(shù)盡量采用固定格式 New結(jié)構(gòu)體名

          賦值操作

          func main() {    var s1 = NewStudent("張三"18"1111")    fmt.Println(s1)}

          執(zhí)行結(jié)果

          為什么構(gòu)造函數(shù)返回的時(shí)結(jié)構(gòu)體指針

          通常來(lái)說(shuō)兩個(gè)原因,第一個(gè)原因時(shí)傳地址性能更高,第二個(gè)原因是因?yàn)橐?guī)范,后面的函數(shù)綁定結(jié)構(gòu)體也是,更多的是一個(gè)規(guī)范。

          不太用糾結(jié)說(shuō)指針怎么怎么看不懂,對(duì)于結(jié)構(gòu)體來(lái)說(shuō),是不是指針,其實(shí)用法都一樣。


          函數(shù)綁定結(jié)構(gòu)體

          如果你有其他語(yǔ)言的基礎(chǔ),你可能對(duì)于類(lèi)和對(duì)象比較熟悉,傳統(tǒng)做法中,是將方法寫(xiě)入類(lèi)中的。

          但是在Go中,采用綁定的方式添加方法。

          語(yǔ)法

          func (一般用this 要綁定的結(jié)構(gòu)體) 函數(shù)名([參數(shù)1,參數(shù)2...]) [(返回值1,返回值2,...)]{    代碼}//一般用this,也可以用其他的,this就像形參一樣,隨便換,用self,用p,用s,都一樣的

          示例:給Student結(jié)構(gòu)體綁定方法。

          func (this Student) say() {    fmt.Printf("我是%v,我今年%v歲了,我的手機(jī)號(hào)是%v\n"this.Name, this.Age, this.phone)}

          main代碼

          func main() {    //調(diào)用構(gòu)造方法    var s1 = NewStudent("張三"18"1111")    //調(diào)用Student綁定的say方法    s1.say()}

          執(zhí)行結(jié)果

          有沒(méi)有感覺(jué)有點(diǎn)Java和Python的感覺(jué)了,上述可是通過(guò)結(jié)構(gòu)體的方式調(diào)用方法的,這里就和C區(qū)分開(kāi)了。

          在Go中,基本就是通過(guò)這些操作,模擬出來(lái)面向?qū)ο蟮模啾戎拢腋?xí)慣Go的方式,更加靈活。


          函數(shù)綁定結(jié)構(gòu)體(指針?lè)绞?

          如果說(shuō)區(qū)別,只是將要修改的 要綁定的結(jié)構(gòu)體 前面加一個(gè)*

          代碼

          func (this *Student) say() {    fmt.Printf("我是%v,我今年%v歲了,我的手機(jī)號(hào)是%v\n"this.Name, this.Age, this.phone)}

          執(zhí)行結(jié)果和上述一摸一樣。


          函數(shù)綁定結(jié)構(gòu)體(指針?lè)绞胶推胀ǚ绞絽^(qū)別)

          通常來(lái)說(shuō),一般使用指針的方式居多。

          嗯...不是居多,是基本都是。

          區(qū)別

          代碼一

          func (this Student) say1() {    fmt.Printf("我是%v,我今年%v歲了,我的手機(jī)號(hào)是%v\n"this.Name, this.Age, this.phone)    this.Name = "666"//這里修改了Name為其他值}

          第3行修改了Name

          func main() {  //調(diào)用構(gòu)造方法  var s1 = NewStudent("張三"18"1111")  //調(diào)用Student綁定的say方法  s1.say1()  //打印s1.Name  fmt.Println(s1.Name)}

          第7行又打印了s1.Name

          執(zhí)行結(jié)果

          ???結(jié)果沒(méi)修改,what。

          代碼二

          func (this *Student) say1() {  fmt.Printf("我是%v,我今年%v歲了,我的手機(jī)號(hào)是%v\n"this.Name, this.Age, this.phone)  this.Name = "666"//這里修改了Name為其他值}

          第一行修改為*

          func main() {  //調(diào)用構(gòu)造方法  var s1 = NewStudent("張三"18"1111")  //調(diào)用Student綁定的say方法  s1.say1()  //打印s1.Name  fmt.Println(s1.Name)}

          執(zhí)行結(jié)果

          這次可以看到,結(jié)果變了,在其他函數(shù)修改了Name,影響了整個(gè)s1的Name。


          結(jié)論

          • 在使用函數(shù)綁定結(jié)構(gòu)體時(shí),也盡可能的將結(jié)構(gòu)體參數(shù)整成*類(lèi)型的。

          • 一是因?yàn)橐?guī)范,二是因?yàn)槊嫦驅(qū)ο蟊驹撊绱耍薷膶?duì)象的屬性,理論來(lái)說(shuō)就應(yīng)該影響整個(gè)對(duì)象值。


          總結(jié)

          上述我們講述了一些Go語(yǔ)言中面向?qū)ο蟮囊恍┲R(shí)。包括有構(gòu)造函數(shù)函數(shù)綁定結(jié)構(gòu)體函數(shù)綁定結(jié)構(gòu)體參數(shù)是指針和無(wú)指針區(qū)別

          一定要自己敲一下,如果在操作過(guò)程中有任何問(wèn)題,記得下面討論區(qū)留言,我們看到會(huì)第一時(shí)間解決問(wèn)題。

          不積跬步無(wú)以至千里,不積小流無(wú)以成江海,給自己一個(gè)成長(zhǎng)的時(shí)間。我是碼農(nóng)星期八,如果覺(jué)得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。感謝你的觀看。

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 94
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  京东热男人的天堂 | 欧美大鸡吧在线 | 91色巴网 | 欧美 日本 国产 | 一本道精品在线播放 |