gpt4 book ai didi

go - 如何在go中隐式转换类型别名?

转载 作者:行者123 更新时间:2023-12-01 22:33:27 25 4
gpt4 key购买 nike

我在Go中阅读到,类型别名需要显式转换,但是以下代码可以正常工作。怎么样?

package main

import (
"fmt"
)

type Coartl [][]rune

func (ptr *Coartl) PushFront(str []rune) {
*ptr = append([][]rune{str}, (*ptr)...)
}

func (ptr *Coartl) PushBack(str []rune) {
*ptr = append((*ptr), str)
}

func (s Coartl) String() string {
var ret string

for _, v := range s {
ret += string(v)
ret += string("\n")
}

return ret
}

func main() {
var coartl Coartl
var art [][]rune = [][]rune{
[]rune("Hai"),
[]rune("Hello"),
}

coartl = art // How this converted

coartl.PushBack([]rune("qwerty"))

fmt.Print(coartl)
}
输出:
Hai
Hello
qwerty

Program exited.
编辑:
但是,为什么下面的代码不起作用?
package main

import (
"fmt"
)

func main() {
type Int int
var i int = 1
var j Int = i // i is not convertable to j ?
fmt.Print(i, j)
}
Go playground

最佳答案

这不是type alias,而是类型定义。类型别名的形式为type Coartl = [][]rune(请注意=)。
您正在将Coartl类型声明为具有基础类型[][]rune
执行分配coartl = art时,请检查assignability。规格说明(显示了相关部分,其余部分请参见链接的规格):

值x可分配给类型T的变量(“x可分配给
T“)如果满足以下条件之一:

  • ...
  • x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是已定义类型。
  • ...

  • 由于 Coartl的基础类型也是 [][]rune,因此可以继续分配。

    关于go - 如何在go中隐式转换类型别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810758/

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