操作 := 只能用於方法內部, 聲明並初始化新的變量,不能用於已聲明變量賦值
var v int = 0
v := 1 // 錯誤
:= 操作左邊必須要有新變量, 那麼多個變量初始化只需要滿足左邊至少有一個新變量即可
f, err := os.Open(infile)
// ...
f, err := os.Create(outfile)//錯誤, f2,err:= os.Create(outfile) , //f,err = os.Create(outfile)
func() (err error) {
aa, err := 1, errors.New(" a error") // a是新變量,err是被賦值
if err != nil {
return // 正確返回err
}
// ------------------------------------------------
if bb, err := 2, errors.New("b error"); err != nil { // 此刻if語句中err被重新創建
return // if語句中的err覆蓋外面的err,導致編譯 錯誤 (err is shadowed during return)
//解決方案----------------------------
//if bb, err1 := 2, errors.New("b error"); err1 != nil {
// err = err1
// return
//-------------------------------------
} else {
fmt.Println(bb)
}
return
}()