gpt4 book ai didi

golang 类型转换规则

转载 作者:IT王子 更新时间:2023-10-29 01:41:23 26 4
gpt4 key购买 nike

以下代码产生错误:

./main.go:12: 不能使用数据(类型 []map[string]interface {})作为参数中的类型行

package main

type (
Row map[string]interface{}
Rows []Row
)

func do(data Rows) {}

func main() {
var data []map[string]interface{}
do(data)
}

如果我尝试进行类型转换,例如do(Rows(data)),去说:

./main.go:12: 无法将数据(type []map[string]interface {})转换为type Rows

但是,以下版本可以编译:

package main

type Rows []map[string]interface{}

func do(data Rows) {}

func main() {
var data []map[string]interface{}
do(data)
}

谁能解释一下为什么?在第一种情况下,有什么正确的方法来进行类型转换吗?

最佳答案

关于“为什么”,请参阅 link posted by mkopriva .以下答案与您的原始案例有关。

在第一种情况下,您可以单独转换每个 map[string]interface{}(循环遍历它们),然后将 []Row 转换为 Rows。你不能一次施放整个东西。从 []Row 到 Rows 的转换可以隐式完成。

这是你的 test snippet用描述的方法来转换它。

package main

type (
Row map[string]interface{}
Rows []Row
)

func do(data Rows) {}

func main() {
var (
data []map[string]interface{}
rws []Row
rows Rows
)
for _, r := range data {
rws = append(rws, Row(r))
rows = append(rows, Row(r))
}
do(Rows(rws)) // possible but not necessary
do(rws) // this works just fine
do(rows)
}

关于golang 类型转换规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com