日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Go語(yǔ)言基礎(chǔ)之結(jié)構(gòu)體(夏日篇)

 前言

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),武邑企業(yè)網(wǎng)站建設(shè),武邑品牌網(wǎng)站建設(shè),網(wǎng)站定制,武邑網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,武邑網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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

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

引言

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

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

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

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

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

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

 
 
 
 
  1. type Student struct { 
  2.     Name  string 
  3.     Age   int 
  4.     phone string 

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

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

賦值操作

 
 
 
 
  1. func main() { 
  2.     var s1 = NewStudent("張三", 18, "1111") 
  3.     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ì)于類和對(duì)象比較熟悉,傳統(tǒng)做法中,是將方法寫入類中的。

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

語(yǔ)法

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

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

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

main代碼

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

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

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

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

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

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

代碼

 
 
 
 
  1. func (this *Student) say() { 
  2.     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ū)別

代碼一

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

第3行修改了Name

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

第7行又打印了s1.Name

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

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

代碼二

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

第一行修改為*了

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

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

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

結(jié)論

  • 在使用函數(shù)綁定結(jié)構(gòu)體時(shí),也盡可能的將結(jié)構(gòu)體參數(shù)整成*類型的。
  • 一是因?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ū)別。

本文轉(zhuǎn)載自微信公眾號(hào)「Go語(yǔ)言進(jìn)階學(xué)習(xí)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語(yǔ)言進(jìn)階學(xué)習(xí)公眾號(hào)。


標(biāo)題名稱:Go語(yǔ)言基礎(chǔ)之結(jié)構(gòu)體(夏日篇)
路徑分享:http://www.dlmjj.cn/article/djecsic.html