golang 操作符:= 造成的err is shadowed during return

今天在编译代码时发生了一个错误

221:4: err is shadowed during return

错误范围代码

for _, v := range scontent {
        tmp := strings.Split(v, `;`)
        labels = append(labels, tmp[0])
        g, err := strconv.Atoi(tmp[3])
        if len(tmp[0]) == 0 || len(tmp[1]) == 0 || len(tmp[2]) == 0 || err != nil || g <= 2010 {
            err = err_student_data
            return
        }
    }

从错误本身理解是返回值err 被遮盖重新定义了,不再是方法的返回值了。
根据错误提示肯定是

g, err := strconv.Atoi(tmp[3])

发生了错误, 提示既是err被重新定义了, 那就是操作符 := 的问题了
Golang的:=操作符理解为

是声明并赋值,并且系统自动推断类型,不需要var关键字

另外Golang的for是独立的作用域,所以for里面用了 := , err本来是希望继承外面变量的作用域的, 但是在这里被重新定义为了一个新的变量造成了错误, 看来Golang还不够智能。