当我注意到以下代码段没有编译时,我感到非常惊讶:
aTime := time.Time{}
if defaultTime := time.Time{} ; aTime != defaultTime {}
编译器返回:
输入 time.Time 不是表达式
defaultTime := time.Time 用作
值未定义:defaultTime
这里的目的是测试aTime变量是否设置为其默认值。
如果我获得结构的指针(defaultTime := &time.Time{}),它也不会编译。
但是,如果我在 if 构造之外初始化 defaultTime,或者使用 new() 内置函数进行初始化,它确实会编译:
aTime := time.Time{}
if defaultTime := new(time.Time) ; aTime != *defaultTime {}
从我到处读到的内容来看,new(myStruct)它应该完全等同于&myStruct{}。
当我解释它时,defaultValue := time.Time {}有资格作为SimpleStmt(特别是Assignment),如If 语句规范中详述。
尽管我尽了最大努力,但我对这种行为没有任何解释。如果有人能让我的头停止旋转,我将不胜感激。
青春有我
湖上湖
相关分类