您好,登錄后才能下訂單哦!
如何解決golang多返回值的問題?針對這個問題,這篇文章給出了相對應的分析和解答,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。
多值返回
Go一個非常特別的特性(對于編譯語言而言)是函數(shù)和方法可以返回多個值(Python和Perl同樣也可以)。
這可以用于改進一大堆在C程序中糟糕的慣例用法:修改參數(shù)的方式,返回一個錯誤(例如遇到EOF則返回-1)。在Go中,Write返回一個計數(shù)值和一個錯誤:“是的,你寫入了一些字節(jié),但是由于設備異常,并不是全部都寫入了”。
os包中的*File.Write是這樣聲明的:
func (file *File) Write(b []byte) (n int, err error)
如同文檔所述,它返回寫入的字節(jié)數(shù),并且當n != len(b)時,返回非nil的error。這是Go中常見的方式。元組沒有作為原生類型出現(xiàn),所以多返回值可能是最佳的選擇。你可以精確的返回希望的值,而無須重載域空間到特定的錯誤信號上。
命名返回值
Go函數(shù)的返回值或者結果參數(shù)可以指定一個名字,并且像原始的變量那樣使用,就像輸入?yún)?shù)那樣。如果對其命名,在函數(shù)開始時,它們會用其類型的零值初始化。如果函數(shù)在不加參數(shù)的情況下執(zhí)行了return語句,結果參數(shù)會返回。用這個特性,允許(再一次的)用較少的代碼做更多的事。
名字不是強制的,但是它們可以使得代碼更加健壯和清晰:這是文檔。例如命名int類型的nextPos返回值,就能說明哪個代表哪個
func nextInt(b []byte, pos int) (value, nextPos int) { /* ... */ }
由于命名結果會被初始化并關聯(lián)于無修飾的return,它們可以非常簡單并且清晰。這里有一段io.ReadFull的代碼,很好的運用了它:
func ReadFull(r Reader, buf []byte) (n int, err error) { for len(buf) > 0 && err == nil { var nr int nr, err = r.Read(buf) n += nr buf = buf[nr:len(buf)] } return }
看完這篇文章,你能夠獨解決golang多返回值的問題了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。