gpt4 book ai didi

go - 从函数返回空接口(interface)的 slice

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:36 25 4
gpt4 key购买 nike

有人可以解释为什么这不起作用吗?我们如何从示例中所示的函数返回接口(interface)片段 []interface{}?

import (
"fmt"
)

func main() {
var test []string
Test(&test)
fmt.Println(test)
}

func Test(t interface{}) {
a := []interface{}{"first", "second"}
fmt.Println(a)
t = a
}

可在此处找到运行代码的示例: https://play.golang.org/p/vcEGHSdWrjv

顺便说一句,这是我试图从中提取数据的 func:https://godoc.org/github.com/mongodb/mongo-go-driver/mongo#Collection.Distinct

注意:我们期望的类型并不总是[]string类型,这里我只是以string为例。

谢谢!

最佳答案

在您的示例中,您并不是要“返回”一个 slice ,而是您似乎希望修改参数以指向一个新的字符串 slice 。

您这样做的方式在 Go 中不起作用,因为参数是按值传递的。

当你这样做时:

t = a

t 是您作为参数发送给函数的 &test副本

所以修改 t 不会改变你的 test 变量。

您需要传入一个指针的地址,以便能够修改指针指向的内容。

试试这个方法:

func main() {
var test *[]string
Test(&test)
fmt.Println(*test)
}

func Test(t interface{}) {
a := []string{"first", "second"}
fmt.Println(a)
*t.(**[]string) = &a
}

输出:

[first second]
[first second]

Playground :https://play.golang.org/p/tliMrmliykp

关于go - 从函数返回空接口(interface)的 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802108/

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