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

huangapple go评论89阅读模式
英文:

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
}

run here

答案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.

huangapple
  • 本文由 发表于 2021年9月8日 22:49:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/69105260.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定