亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何解決編寫代碼時出現的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

雷波县| 布尔津县| 包头市| 收藏| 宁波市| 黑龙江省| 舟曲县| 临朐县| 罗甸县| 彭泽县| 斗六市| 广东省| 灵武市| 安溪县| 文昌市| 平乡县| 石楼县| 长岭县| 萍乡市| 长沙县| 个旧市| 仁寿县| 稻城县| 昌宁县| 北海市| 张家界市| 奎屯市| 清水县| 绥江县| 鄄城县| 建宁县| 巴林右旗| 和田市| 泸溪县| 当涂县| 都安| 中方县| 丰县| 潞西市| 靖宇县| 长寿区|