英文:
Converting []*string to []string in golang
问题
我是你的中文翻译助手,以下是你要翻译的内容:
我是Go语言的新手。
我有一个接受[]string
作为输入的函数,但是我需要传递一个[]*string
作为输入,如何将[]*string
转换为[]string
?
有没有办法使用任何工具将其转换,还是我必须使用for循环迭代并构造一个数组?
Playground链接:https://play.golang.org/p/_s2g7-IfGAy
package main
import (
"fmt"
)
func main() {
//声明一个包含 []*string 的数组并给它赋值
var a [1]*string
var strPointer = new(string)
*strPointer = "1"
a[0] = strPointer
fmt.Println(*a[0])
// accept(a) 这样不起作用
//转换为 []string 数组
var b []string
for i := range a {
b = append(b, *a[i])
}
accept(b)// 这样可以工作
fmt.Println(b)
}
func accept(param []string) {
fmt.Println("成功!")
}
英文:
i'm new to go.
i have a function that accepts []string
as input, but i the input i have to pass is an []*string
, how do i convert []*string
to []string
.
is there any way to convert it using any utilities, or do i have to iterate it using a for-loop and construct an array?
Playground link https://play.golang.org/p/_s2g7-IfGAy
package main
import (
"fmt"
)
func main() {
//Declaring an array of []*string and assigning value to it
var a [1]*string
var strPointer = new(string)
*strPointer = "1"
a[0] = strPointer
fmt.Println(*a[0])
// accept(a) this wont work
//Converting to array []string
var b []string
for i := range a {
b = append(b, *a[i])
}
accept(b)// this works
fmt.Println(b)
}
func accept(param []string) {
fmt.Println("Works!")
}
答案1
得分: 6
你的 accept(param []string)
函数期望一个字符串切片。
var a [1]*string
这个声明了一个长度为 1
的 Go 数组,所以它不是一个切片。
你可以使用 var a []*string
来声明一个空的字符串指针切片。
然后你需要遍历数组,并使用指针元素的值创建一个切片,然后使用该切片调用 accept
函数。
下面是一个将 []*string 转换为 []string 的示例函数:
func stringer(str []*string) []string {
var strs []string
for _, s := range str {
if s == nil {
strs = append(strs, "")
continue
}
strs = append(strs, *s)
}
return strs
}
英文:
Your accept(param []string)
expect a slice of string.
var a [1]*string
This declares Go array with a length of 1
. So it's not a slice.
You can declare an empty slice of string pointers using this. var a []*string
And you have to iterate through the array and make a slice with the value of pointer elements and call the accept
with that slice.
Example function to convert []*string to []string
func stringer(str []*string) []string{
var strs []string
for _, s := range str {
if s == nil {
strs = append(strs, "")
continue
}
strs = append(strs, *s)
}
return strs
}
答案2
得分: 2
你不能直接将[]*string
转换为[]string
,这种类型转换在Go语言中是不可能的。
如果你想要转换,可以使用第三方库/工具/包,但是在Stack Overflow上询问这类问题是不被允许的。
你可以通过使用for循环来遍历[]*string
,并构建一个[]string
数组来实现转换。这是唯一干净、正常和符合Go语言惯例的方法。
英文:
> how do i convert []*string to []string
You cannot. This kind of type conversion not possible in Go.
> is there any way to convert it using any utilities [...]
Asking for 3rd party libraries/tools/packages is OT on SO.
> [...] or do i have to iterate it using a for-loop and construct an array
This is the only clean, normal, "idiomatic" way of doing this.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论