91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決編寫代碼時出現的Go問題

發布時間:2021-10-12 15:38:43 來源:億速云 閱讀:140 作者:iii 欄目:編程語言

這篇文章主要介紹“如何解決編寫代碼時出現的Go問題”,在日常操作中,相信很多人在如何解決編寫代碼時出現的Go問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何解決編寫代碼時出現的Go問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

如何解決編寫代碼時出現的Go問題

案例一

代碼示例如下:

type MyErr struct {     Msg string }  func main() {     var e error     e = GetErr()     log.Println(e == nil) }  func GetErr() *MyErr {     return nil }  func (m *MyErr) Error() string {     return "腦子進煎魚了" }

請思考一下,這段程序的輸出結果是什么?

該程序所調用的 GetErr 方法所返回的是 nil,而外部判斷是 e == nil,因此最終的輸出結果是 true,對嗎?

輸出結果如下:

2021/04/04 08:39:04 false

答案是:false。

案例二

代碼示例如下:

type Base interface {     do() }  type App struct { }  func main() {     var base Base     base = GetApp()          log.Println(base)     log.Println(base == nil) }  func GetApp() *App {     return nil } func (a *App) do() {}

請思考一下,這段程序的輸出結果是什么?

該程序調用了 GetApp 方法,該方法返回的是 nil,因此其賦值的 base 也是 nil。因此判斷 base == nil 的最終輸出結果是和 true,對嗎?

輸出結果如下:

2021/04/04 08:59:00 <nil> 2021/04/04 08:59:00 false

答案是:和 false。

為什么

為什么,這兩段 Go 程序是怎么回事...也太反直覺了?其背后的原因本質上還是對 Go 語言中 interface 的基本原理的理解。

在案例一中,雖然 GetErr 方法確實是返回了 nil,返回的類型也是具體的 *MyErr 類型。但是其接收的變量卻不是具體的結構類型,而是 error  類型:

var e error e = GetErr()

在 Go 語言中, error 類型本質上是 interface:

type error interface {     Error() string }

因此兜兜轉轉又回到了 interface 類型的問題,interface 不是單純的值,而是分為類型和值。

所以傳統認知的此 nil 并非彼 nil,必須得類型和值同時都為 nil 的情況下,interface 的 nil 判斷才會為 true。

在案例一中,結合代碼邏輯,更符合場景的是:

var e *MyErr e = GetErr() log.Println(e == nil)

輸出結果就會是 true。

在案例二中,也是一樣的結果,原因也是 interface。不管是 error  接口(interface),還是自定義的接口,背后原理一致,自然也就結果一致了。

到此,關于“如何解決編寫代碼時出現的Go問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屯昌县| 石泉县| 武川县| 柳林县| 林口县| 富阳市| 启东市| 镶黄旗| 景泰县| 青河县| 遂溪县| 江山市| 工布江达县| 广平县| 宜州市| 商都县| 田东县| 南投市| 农安县| 蓝山县| 西昌市| 屯门区| 沧州市| 临城县| 乌拉特后旗| 云浮市| 南阳市| 庆云县| 竹溪县| 阳山县| 汤阴县| 济南市| 吕梁市| 合作市| 罗甸县| 灵寿县| 于田县| 筠连县| 汾阳市| 古浪县| 阿拉善右旗|