You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中不同int切片类型赋值差异的原因探究

问题解答

先看你给出的类型与变量定义:

type MyInt int
type Ints []int
type MyInts []MyInt

var is []int
var ints Ints
var myInts MyInts

两种赋值情况的编译差异,核心在于Go语言对自定义类型的底层结构匹配规则:

  • is = ints能编译的原因:
    Ints是直接基于原生切片[]int定义的自定义类型,它的底层类型和is的[]int完全一致。Go允许这种底层结构完全匹配的自定义切片类型,直接赋值给对应的原生切片变量,所以这条赋值语句能正常通过编译。

  • is = myInts编译失败的原因:
    MyInts的底层类型是[]MyInt,而MyInt本身是基于int的自定义类型——也就是说,MyInts的元素类型是MyInt,而非原生的int。虽然MyInt和int的底层都是int,但它们属于不同的类型,这就导致[]MyInt和[]int的底层结构不匹配,Go不允许这种跨类型的隐式赋值转换,所以这条语句会编译报错。

如果要实现myInts到is的赋值,你需要手动做类型转换,比如遍历myInts的每个元素,把MyInt转成int后构造新的[]int切片:

is = make([]int, len(myInts))
for i, v := range myInts {
    is[i] = int(v)
}

内容的提问来源于stack exchange,提问作者Picci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:00:47