gpt4 book ai didi

go - 理解类型转换的困惑

转载 作者:IT王子 更新时间:2023-10-29 01:43:49 27 4
gpt4 key购买 nike

    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)
}

对/对:[1 2][1 2]

在这里,我的理解是 a,b 标识符共享相同的底层类型 ([]byte)。所以我们可以交换 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 行中,我无法分配变量。这个Error可以通过使用Explicit conversion T(x)来消除,我想明白为什么我们不能做隐式转换由于这两个变量共享相同的底层类型,但我无法分配它。

谁能解释一下这些背后的原因?

如果可能,请提供有关变量、结构类型、函数参数之间类型转换的良好文档。

最佳答案

这是设计使然。 Go 编程语言需要不同类型之间的赋值来进行显式转换。

看起来您只是简单地将字符串类型别名化为不同的名称,但从技术上讲,您是在创建一个新类型,存储类型为字符串,两者之间存在细微差别。

在 Go 中定义别名的方式 (as of 1.9) 略有不同,有一个等号。

类型 abc = string

如果对为什么 Go 没有隐式转换有任何困惑,当你只处理底层字符串类型时,这可能看起来很愚蠢,但对于更复杂的类型,它确保程序员通过查看就知道了发生转换的代码。

它在调试应用程序时特别有用,特别是在数字类型之间进行转换以了解何时进行转换时,这样如果存在位截断,即 uint64uint32,很明显可以看出发生了什么。

https://tour.golang.org/basics/13

关于go - 理解类型转换的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54936854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com