这部分:
if tm, err := time.Parse(...)
创建一个仅在语句中具有作用域的 新 变量-不是您声明为的变量。
tm``if``var tm time.Time
中没有使用此新变量
if,因此会出现错误。请注意,您也没有
tm分配外部级别,因此
fmt.Println将打印零时间,而不是时间.Parse返回。
要解决此问题:声明
err并更改
if为:
var err errorif tm, err = time.Parse(...)
注意,这在GO中是一件微妙的事情,并且是常见的错误来源。
:=实际上,该语句可以与已经声明的变量和一个或多个 新 变量混合使用(如果已经声明的变量在
同一词法范围内)
。然后,只有新的才被自动声明,
:=其余的才被赋值(与一样
=)。但是,如果
:=在新作用域中使用,则将在该作用域中声明ALL变量,并屏蔽具有相同名称的任何外部作用域变量(例如在
if;中;请注意,该
if条件不在括号内,但仍视为如果它在
{pre}块内;forGO中的和其他复合语句也会发生同样的情况。



