国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

GO err is shadowed during return

2019-11-06 06:42:42
字體:
來源:轉載
供稿:網友

這里先復現問題,然后進行問題說明。

//test.go

package mainimport "fmt"import "strconv"func foo(x string) (ret int, err error) {	if true {		ret, err := strconv.Atoi(x)		if err != nil {			return		}	}	return ret, nil}func main() {	fmt.PRintln(foo("123"))}

運行:

OK,問題復現了,下面進行問題分析。

func foo(x string) (ret int, err error) {//返回值列表定義了ret和err變量,作用域是整個函數體if true {//新的語句塊ret, err := strconv.Atoi(x)  //這里又定義了新的變量ret和err,和返回值列表重名了。作用域是if語句塊if err != nil {return  //這里的return語句會導致外層的ret和err被返回,而不是if語句里的ret和err}}return ret, nil}

來自網上的解釋:

It's a new scope, so a naked return returns the outer err, not your inner err that was != nil.So it's almost certainly not what you meant, hence the error.下面進行修改(只需要保證局部變量和全局變量不重名即可):

//test.go

package mainimport "fmt"import "strconv"func foo(x string) (ret int, err error) {if true {ret1, err1 := strconv.Atoi(x)if err1 != nil {err = err1return}ret = ret1}return ret, nil}func main() {fmt.Println(foo("123"))}

運行:


上一篇:構造函數

下一篇:什么是KMP匹配算法?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏邑县| 波密县| 陈巴尔虎旗| 五华县| 遂宁市| 磴口县| 连城县| 垫江县| 阿克陶县| 台北市| 临桂县| 遵义县| 谷城县| 海兴县| 金华市| 建瓯市| 兴义市| 新巴尔虎左旗| 陇川县| 吐鲁番市| 聂荣县| 桐庐县| 双鸭山市| 元阳县| 榆中县| 岢岚县| 开鲁县| 开平市| 曲麻莱县| 云南省| 格尔木市| 汶川县| 天门市| 噶尔县| 昆山市| 英吉沙县| 夹江县| 宁阳县| 奎屯市| 全椒县| 普陀区|