golang中将[]*string转换为[]string

Jit*_*ath 4 go

我是新来的。我有一个接受输入的函数[]string,但我必须传递的输入是[]*string,我如何转换[]*string[]string. 有没有办法使用任何实用程序来转换它,或者我是否必须使用 for 循环迭代它并构造一个数组?

游乐场链接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!")
}
Run Code Online (Sandbox Code Playgroud)

nip*_*una 6

accept(param []string)期望一片字符串。

var a [1]*string这声明了长度为 的 Go 数组1。所以它不是一个切片。

您可以使用它声明一个空的字符串指针切片。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
}
Run Code Online (Sandbox Code Playgroud)

跑到这里

  • 为了减少重新分配,可以进行[次要优化](https://play.golang.org/p/_avDpAvUsLn)。 (5认同)