golang中怎么一次把[]int转为[]int32

a:=[]int{1,2,3}
b:=[]int32(a)     //这样好像不行

只能遍历一个个转么

阅读 9.4k
2 个回答

只能遍历,golang真的没有语法糖

新手上路,请多包涵

1.32位系统下,int默认是32位的, 此时int大小等于int32
此时可以使用unsafe转换

import (
    "fmt"
    "unsafe"
)

func main()  {
    a := []int{1,2,3}
    b := *(*[]int32)(unsafe.Pointer(&a))
    fmt.Println(b)
}

2.64位系统下,int默认是64位的, 此时int大小等于int64
用上述方法话,由于ptr0 + ptr(int32)的指针不指向任何数组{1,2,3}值,所以是野指针
所以64位下转换会有问题,暂时没找到过滤掉野指针的方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏