Golang Go语言中切片如何转数组?

发布于 1周前 作者 songsunli 来自 Go语言

Golang Go语言中切片如何转数组?

切片如何转数组? gorm 的 in 查询不支持切片

10 回复

首先必须长度固定,然后
var target[5]int
copy(target[:], source)

更多关于Golang Go语言中切片如何转数组?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html



问题是长度不知道啊

那就
target := make([]int, n)
copy(target[:], source)

gorm 的 in 查询是支持切片的: http://gorm.io/docs/query.html#Plain-SQL
xorm 不支持(吐血)


哥 帮我看看
sql: converting argument $4 type: unsupported type []string, a slice of string

解决了
原来不能传指针!

#5
xorm Raw SQL 查询的时候,怎么实现 in 传值呢?
我试了下:db.SQL(“select * from test”).In(“id”, []uint64{1, 2, 3}).Find(&ret)
这样子并不可以


使用 raw sql,就不用再使用 In、where 这些函数了;
db.SQL(“select * from test where id in xxxx”),这样会存在 sql 注入的风险

在Go语言中,切片(slice)和数组(array)虽然都用于存储一组元素,但它们在底层实现和使用场景上有所不同。切片是更为灵活和动态的数据结构,而数组则具有固定长度。由于这种差异,Go语言本身并没有直接提供将切片转换为数组的内置方法。然而,你可以通过以下几种方式实现这一需求:

  1. 手动复制: 你可以创建一个与切片长度相同的数组,并手动将切片中的元素复制到数组中。这种方法需要显式地处理数组的长度和类型。

    slice := []int{1, 2, 3}
    var array [3]int
    copy(array[:], slice)
    
  2. 使用循环: 类似于手动复制,你可以使用循环将切片中的元素逐一赋值给数组。这种方法在处理复杂类型或需要额外处理时可能更灵活。

  3. 使用第三方库(不推荐,除非必要): 某些第三方库可能提供了切片到数组的转换工具,但通常这些库会增加额外的依赖和复杂性,因此不建议仅为了这个目的而使用。

需要注意的是,由于数组的长度是固定的,因此在将切片转换为数组时,必须确保切片的长度不超过目标数组的长度,否则会导致运行时错误。在实际编程中,如果数组的长度不是固定的,或者你需要动态地调整数据集合的大小,通常推荐使用切片而不是数组。

回到顶部