【发布时间】:2019-03-01 01:50:52
【问题描述】:
package main
import (
"fmt"
)
type val []byte
func main() {
var a []byte = []byte{0x01,0x02}
var b val = a
fmt.Println(a)
fmt.Println(b)
}
o/p: [1 2] [1 2]
在这里,我的理解是 a,b 标识符共享相同的底层类型([]byte)。所以我们可以交换 b/w 2 个变量的值。
package main
import (
"fmt"
)
type abc string
func main() {
fm := fmt.Println
var second = "whowww"
var third abc = second //compile Error at this line 12
fm(second)
fm(third)
}
在第 12 行中,我无法分配变量。 可以通过使用显式转换 T(x) 来消除此错误,我想了解为什么我们不能进行隐式转换 由于两个变量共享相同的底层类型,但我无法分配它。
有人能解释一下这些背后的原因吗?
如果可能的话,请为我提供关于变量、结构类型、函数参数之间类型转换的良好文档。
【问题讨论】:
-
在这个例子中你没有任何类型转换。 "Assignability"下你想要的文档
-
语言规范是这里的权威文档。与大多数其他语言规范相反,它非常易读。
-
您可以分配它,但它需要显式转换:
var third abc = abc(second)。 play.golang.org/p/1_oMLVy-2lI -
@TravisHegner 我们可以使用显式转换 T(x) 来转换类型。你能详细说明为什么我们不能进行隐式转换吗?
标签: go