-
慕哥9229398
为什么语法有效?2/a“对于其他二元运算符,操作数类型必须相同,除非操作涉及移位或无类型常量。 是一个非类型化常量。2为什么语法无效?b/a事实并非如此。它在语法上是完全有效的;它只是语义上是错误的,因为它是对不匹配类型的操作。
-
收到一只叮咚
它不是无效的语法。它是不匹配的类型:invalid operation: b / a (mismatched types int and float64)对于二进制操作,类型必须相同。 是 ,并且是 ,因此要执行操作,必须明确说明类型:bintafloat64float64(b)/a这将使两个操作数都成为 。所以会:float64b/int(a)其中两个操作数都是 。int这不是问题,因为 是一个非类型化常量,其实际类型是根据上下文确定的。由于 是 ,在本例中是 。2/a2afloat642float64
-
梦里花落0921
其他答案提供了很好的观点,我只是想补充一下我对规则的记忆。首先是这个例子:a := 1e6b := 2fmt.Println(b / a) 在此示例中,两个值都是“类型锁定”的,也就是说,在为每个变量声明一个类型后,您正在执行除法。由于类型不匹配,操作将失败:invalid operation: b / a (mismatched types int and float64)此示例:a := 1e6fmt.Println(2 / a) 现在尚未分配类型,因此它基本上可以是任何数字类型。既然是,那么只要说“好吧,我也会”,分裂就成功了。2afloat642float64