第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

解鎖即可觀看《Go開發(fā)工程師》完整課程視頻

Go開發(fā)工程師

未來(lái)3-5年企業(yè)高性能項(xiàng)目不可替代的語(yǔ)言,從基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)再到重構(gòu),真正從入門到精通

【第1周】Go基礎(chǔ)知識(shí)入門
【第2周】容器,go編程思想
【第3周】Go并發(fā)編程和工程管理
【第4周】從0開始理解rpc和grpc
【第5周】grpc和protobuf進(jìn)階
【第6周】 yapi文檔管理、gorm詳解
【第7周】gin快速入門
【第8周】用戶服務(wù)的grpc服務(wù)
【第9周】用戶服務(wù)的web服務(wù)
【第10周】服務(wù)注冊(cè)/發(fā)現(xiàn)、配置中心、負(fù)載均衡
【第11周】商品微服務(wù)的grpc服務(wù)
【第12周】 商品微服務(wù)的gin層和oss圖片服務(wù)
【第13周】庫(kù)存服務(wù)和分布式鎖
【第14周】訂單和購(gòu)物車微服務(wù)
【第15周】 支付寶支付、用戶操作微服務(wù)、前后端聯(lián)調(diào)
【第16周】elasticsearch實(shí)現(xiàn)搜索微服務(wù)
【第17周】 分布式理論基礎(chǔ)、分布式事務(wù)解決方案
【第18周】 學(xué)習(xí)rocketmq實(shí)現(xiàn)冪等性機(jī)制等
【第19周】鏈路追蹤、限流、熔斷、降級(jí)
【第20周】api網(wǎng)關(guān)、部署
【第21周】開發(fā)規(guī)范和go基礎(chǔ)擴(kuò)展
【第22周】設(shè)計(jì)模式和單元測(cè)試
【第23周】protoc插件開發(fā)、cobra命令行
【第24周】log日志包設(shè)計(jì)
【第25周】ast代碼生成工具開發(fā)
【第26周】三層代碼結(jié)構(gòu)
【第27周】grpc服務(wù)封裝更方便的rpc服務(wù)
【第28周】深入grpc的服務(wù)注冊(cè)、負(fù)載均衡原理
【第29周】基于gin封裝api服務(wù)
【第30周】可觀測(cè)的終極解決方案
【第31周】系統(tǒng)監(jiān)控核心
【第32周】用戶、商品服務(wù)重構(gòu)
【第33周】訂單、庫(kù)存等服務(wù)重構(gòu)
【第33+周】訂單服務(wù)重構(gòu)、wire進(jìn)行ioc控制
【第34周】通過(guò)k8s部署服務(wù)
【第34+周】devops和k8s
章節(jié)
問(wèn)答
課簽
筆記
評(píng)論
占位
占位

Go語(yǔ)言-結(jié)構(gòu)體和方法

    Go語(yǔ)言的結(jié)構(gòu)體類型(Struct)比函數(shù)類型更加靈活。它可以封裝屬性和操作。前者即是結(jié)構(gòu)體類型中的字段,而后者則是結(jié)構(gòu)體類型所擁有的方法。
  
    結(jié)構(gòu)體類型的字面量由關(guān)鍵字type、類型名稱、關(guān)鍵字struct,以及由花括號(hào)包裹的若干字段聲明組成。其中,每個(gè)字段聲明獨(dú)占一行并由字段名稱(可選)和字段類型組成。示例如下:

type Person struct {
    Name   string
    Gender string
    Age    uint8
}   

    結(jié)構(gòu)體類型Person中有三個(gè)字段,分別是Name、GenderAge。我們可以用字面量創(chuàng)建出一個(gè)該類型的值,像這樣:

Person{Name: "Robert", Gender: "Male", Age: 33}    

    可以看到,結(jié)構(gòu)體值的字面量(或簡(jiǎn)稱結(jié)構(gòu)體字面量)由其類型的名稱和由花括號(hào)包裹的若干鍵值對(duì)組成。注意,這里的鍵值對(duì)與字典字面量中的鍵值對(duì)的寫法相似,但不相同。這里的鍵是其類型中的某個(gè)字段的名稱(注意,它不是字符串字面量),而對(duì)應(yīng)的值則是欲賦給該字段的那個(gè)值。另外,如果這里的鍵值對(duì)的順序與其類型中的字段聲明完全相同的話,我們還可以統(tǒng)一省略掉所有字段的名稱,就像這樣:

Person{"Robert", "Male", 33}   

    當(dāng)然,我們?cè)诰帉懩硞€(gè)結(jié)構(gòu)體類型的值字面量時(shí)可以只對(duì)它的部分字段賦值,甚至不對(duì)它的任何字段賦值。這時(shí),未被顯式賦值的字段的值則為其類型的零值。注意,在上述兩種情況下,字段的名稱是不能被省略的。
    
    與代表函數(shù)值的字面量類似,我們?cè)诰帉懸粋€(gè)結(jié)構(gòu)體值的字面量時(shí)不需要先擬好其類型。這樣的結(jié)構(gòu)體字面量被稱為匿名結(jié)構(gòu)體。與匿名函數(shù)類似,我們?cè)诰帉懩涿Y(jié)構(gòu)體的時(shí)候需要先寫明其類型特征(包含若干字段聲明),再寫出它的值初始化部分。下面,我們依照結(jié)構(gòu)體類型Person創(chuàng)建一個(gè)匿名結(jié)構(gòu)體:

p := struct {
    Name   string
    Gender string
    Age    uint8
}{"Robert", "Male", 33}

    匿名結(jié)構(gòu)體最大的用處就是在內(nèi)部臨時(shí)創(chuàng)建一個(gè)結(jié)構(gòu)以封裝數(shù)據(jù),而不必正式為其聲明相關(guān)規(guī)則。而在涉及到對(duì)外的場(chǎng)景中,我強(qiáng)烈建議使用正式的結(jié)構(gòu)體類型。
  
    我在本節(jié)開始處提到過(guò),結(jié)構(gòu)體類型可以擁有若干方法(注意,匿名結(jié)構(gòu)體是不可能擁有方法的)。所謂方法,其實(shí)就是一種特殊的函數(shù)。它可以依附于某個(gè)自定義類型。方法的特殊在于它的聲明包含了一個(gè)接收者聲明。這里的接收者指代它所依附的那個(gè)類型。我們?nèi)砸越Y(jié)構(gòu)體類型Person為例。下面是依附于它的一個(gè)名為Grow的方法的聲明:

func (person *Person) Grow() {
    person.Age++
} 

    如上所示,在關(guān)鍵字func和名稱Grow之間的那個(gè)圓括號(hào)及其包含的內(nèi)容就是接收者聲明。其中的內(nèi)容由兩部分組成。第一部分是代表它依附的那個(gè)類型的值的標(biāo)識(shí)符。第二部分是它依附的那個(gè)類型的名稱。后者表明了依附關(guān)系,而前者則使得在該方法中的代碼可以使用到該類型的值(也稱為當(dāng)前值)。代表當(dāng)前值的那個(gè)標(biāo)識(shí)符可被稱為接收者標(biāo)識(shí)符,或簡(jiǎn)稱為接收者。請(qǐng)看下面的示例:

p := Person{"Robert", "Male", 33}
p.Grow()   

    我們可以直接在Person類型的變量p之上應(yīng)用調(diào)用表達(dá)式來(lái)調(diào)用它的方法Grow。注意,此時(shí)方法Grow的接收者標(biāo)識(shí)符person指代的正是變量p的值。這也是“當(dāng)前值”這個(gè)詞的由來(lái)。在Grow方法中,我們通過(guò)使用選擇表達(dá)式選擇了當(dāng)前值的字段Age,并使其自增。因此,在語(yǔ)句p.Grow()被執(zhí)行之后,p所代表的那個(gè)人就又年長(zhǎng)了一歲(pAge字段的值已變?yōu)?code class="marker">34)。
  
    需要注意的是,在Grow方法的接收者聲明中的那個(gè)類型是*Person,而不是Person。實(shí)際上,前者是后者的指針類型。這也使得person指代的是p的指針,而不是它本身。至于為什么這么做,我們?cè)谥v指針的時(shí)候在予以揭曉。
  
    說(shuō)到這里,熟悉面向?qū)ο缶幊痰耐瑢W(xué)可能已經(jīng)意識(shí)到,包含若干字段和方法的結(jié)構(gòu)體類型就相當(dāng)于一個(gè)把屬性和操作封裝在一起的對(duì)象。不過(guò)要注意,與對(duì)象不同的是,結(jié)構(gòu)體類型(以及任何類型)之間都不可能存在繼承關(guān)系。實(shí)際上,在Go語(yǔ)言中并沒(méi)有繼承的概念。不過(guò),我們可以通過(guò)在結(jié)構(gòu)體類型的聲明中添加匿名字段(或稱嵌入類型)來(lái)模仿繼承。具體細(xì)節(jié)可以參考《Go并發(fā)編程實(shí)戰(zhàn)》中的說(shuō)明,或者關(guān)注我的后續(xù)課程。
  
    最后,結(jié)構(gòu)體類型屬于值類型。它的零值并不是nil,而是其中字段的值均為相應(yīng)類型的零值的值。舉個(gè)例子,結(jié)構(gòu)體類型Person的零值若用字面量來(lái)表示的話則為Person{}。

任務(wù)

為源碼文件中聲明的結(jié)構(gòu)體類型Person添加相應(yīng)的字段和方法,使得該文件不會(huì)導(dǎo)致任何編譯錯(cuò)誤并能夠在標(biāo)準(zhǔn)輸出上打印出Robert moved from Beijing to San Francisco.

?不會(huì)了怎么辦

    需要在Person的聲明中加入一個(gè)字段聲明:

Address string  

    同時(shí)為其增加一個(gè)名為Move方法,如:

func (person *Person) Move(newAddress string) string {
    old := person.Address
    person.Address = newAddress
    return old
}

    注意,后者的實(shí)現(xiàn)并不唯一。

||

提問(wèn)題

寫筆記

公開筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問(wèn)題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問(wèn)將花費(fèi)2個(gè)積分

你的積分不足,無(wú)法發(fā)表

為什么扣積分?

本次提問(wèn)將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?