【发布时间】:2025-12-11 16:00:01
【问题描述】:
我对 Go 很陌生,所以这可能很明显。编译器不允许以下代码: (http://play.golang.org/p/3sTLguUG3l)
package main
import "fmt"
type Card string
type Hand []Card
func NewHand(cards []Card) Hand {
hand := Hand(cards)
return hand
}
func main() {
value := []string{"a", "b", "c"}
firstHand := NewHand(value)
fmt.Println(firstHand)
}
错误是:
/tmp/sandbox089372356/main.go:15: cannot use value (type []string) as type []Card in argument to NewHand
从规范看来,[]string 与 []Card 的底层类型不同,因此无法进行类型转换。
确实是这样,还是我错过了什么?
如果是这样,为什么会这样?假设,在一个非宠物示例程序中,我输入了一段字符串,有没有办法将它“转换”成一段 Card,或者我必须创建一个新结构并将数据复制到其中? (我想避免这种情况,因为我需要调用的函数会修改切片内容)。
【问题讨论】:
-
type Card string您正在引入一个实际的新类型,而不是类型别名。Card是一种新类型,它可以拥有自己的方法和行为集。
标签: go type-conversion slice