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

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

Go開發(fā)工程師

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

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

Go語言-指針

    我們在前面多次提到過指針及指針類型。例如,*PersonPerson的指針類型。又例如,表達(dá)式&p的求值結(jié)果是p的指針。方法的接收者類型的不同會給方法的功能帶來什么影響?該方法所屬的類型又會因此發(fā)生哪些潛移默化的改變?現(xiàn)在,我們就來解答第一個問題。至于第二個問題,我會在下一小節(jié)予以解答。

    指針操作涉及到兩個操作符——&*。這兩個操作符均有多個用途。但是當(dāng)它們作為地址操作符出現(xiàn)時,前者的作用是取址,而后者的作用是取值。更通俗地講,當(dāng)?shù)刂凡僮鞣?code class="marker">&被應(yīng)用到一個值上時會取出指向該值的指針值,而當(dāng)?shù)刂凡僮鞣?code class="marker">*被應(yīng)用到一個指針值上時會取出該指針指向的那個值。它們可以被視為相反的操作。
  
    除此之外,當(dāng)*出現(xiàn)在一個類型之前(如*Person*[3]string)時就不能被看做是操作符了,而應(yīng)該被視為一個符號。如此組合而成的標(biāo)識符所表達(dá)的含義是作為第二部分的那個類型的指針類型。我們也可以把其中的第二部分所代表的類型稱為基底類型。例如,*[3]string是數(shù)組類型[3]string的指針類型,而[3]string*[3]string的基底類型。
  
    好了,我們現(xiàn)在回過頭去再看結(jié)構(gòu)體類型Person。它及其兩個方法的完整聲明如下:

type Person struct {
    Name    string
    Gender  string
    Age     uint8
    Address string
}

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

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

    注意,Person的兩個方法GrowMove的接收者類型都是*Person,而不是Person。只要一個方法的接收者類型是其所屬類型的指針類型而不是該類型本身,那么我就可以稱該方法為一個指針方法。上面的Grow方法和Move方法都是Person類型的指針方法。
  
    相對的,如果一個方法的接收者類型就是其所屬的類型本身,那么我們就可以把它叫做值方法。我們只要微調(diào)一下Grow方法的接收者類型就可以把它從指針方法變?yōu)橹捣椒ǎ?/p>

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

    那指針方法和值方法到底有什么區(qū)別呢?我們在保留上述修改的前提下編寫如下代碼:

p := Person{"Robert", "Male", 33, "Beijing"}
p.Grow()
fmt.Printf("%v\n", p)   

    這段代碼被執(zhí)行后,標(biāo)準(zhǔn)輸出會打印出什么內(nèi)容呢?直覺上,34會被打印出來,但是被打印出來的卻是33。這是怎么回事呢?Grow方法的功能失效了?!
  
    解答這個問題需要引出一條定論:方法的接收者標(biāo)識符所代表的是該方法當(dāng)前所屬的那個值的一個副本,而不是該值本身。例如,在上述代碼中,Person類型的Grow方法的接收者標(biāo)識符person代表的是p的值的一個拷貝,而不是p的值。我們在調(diào)用Grow方法的時候,Go語言會將p的值復(fù)制一份并將其作為此次調(diào)用的當(dāng)前值。正因為如此,Grow方法中的person.Age++語句的執(zhí)行會使這個副本的Age字段的值變?yōu)?code class="marker">34,而pAge字段的值卻依然是33。這就是問題所在。
  
    只要我們把Grow變回指針方法就可以解決這個問題。原因是,這時的person代表的是p的值的指針的副本。指針的副本仍會指向p的值。另外,之所以選擇表達(dá)式person.Age成立,是因為如果Go語言發(fā)現(xiàn)person是指針并且指向的那個值有Age字段,那么就會把該表達(dá)式視為(*person).Age。其實,這時的person.Age正是(*person).Age的速記法。

任務(wù)

在命令源碼文件index.go中,我已經(jīng)編寫好了結(jié)構(gòu)體類型MyInt及其兩個方法。我希望在該文件被運行之后在標(biāo)準(zhǔn)輸出上打印出true。但是好像哪里出了問題,致使標(biāo)準(zhǔn)輸出上總是出現(xiàn)false。你能幫我找出問題所在并修正它嗎?要求僅對一處做出修改。

?不會了怎么辦

MyInt類型的Decrease方法由值方法改為指針方法即可。至于怎樣改請回顧本節(jié)的“知識要點”。

||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

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

綁定后可得到

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

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

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

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報

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

手記推薦

更多

本次提問將花費2個積分

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

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?