比如[]T
转[]any
,只能通过遍历显式类型转换吗?有没有其他方法。
func toAnyArray[T any](s []T) []any {
t := make([]any, len(s))
for i, v := range s {
t[i] = v
}
return t
}
1
caotian 2023-03-21 13:12:02 +08:00
试试 lo 库
|
2
0o0O0o0O0o 2023-03-21 13:25:26 +08:00 via iPhone 3
|
3
qieqie 2023-03-21 14:14:42 +08:00 1
转[]any/ {}interface 比较特殊,其它类型可以用 reflect.SliceHeader 之类的奇技淫巧
https://github.com/golang/go/wiki/InterfaceSlice |
4
keakon 2023-03-21 15:31:02 +08:00
如果类型兼容,用 unsafe.Pointer 转,但是 []any 不行
a := []int{1, 2, 3} b := *(*[]uint)(unsafe.Pointer(&a)) fmt.Println(b) c := *(*[]float32)(unsafe.Pointer(&a)) fmt.Println(c) d := *(*[]float64)(unsafe.Pointer(&a)) fmt.Println(d) e := *(*[]any)(unsafe.Pointer(&a)) fmt.Println(e) 如果是做接口的话,不建议用 []any ,直接用 any ,然后做类型检查,文档中注明比较好。 |
5
LeegoYih OP @keakon 谢谢,是调用方,实际场景是调用 sql.Stmt 的 Query 方法`func (s *Stmt) Query(args ...any) (*Rows, error)`
暂时先不用泛型了吧🤣 |
6
guonaihong 2023-03-30 20:37:21 +08:00
Copilot, 回车工程师的诞生。
|