9

假设一个函数接受一个字符串数组:

func Join(strs []string) {
     ...
}

我有一个字符串:

a := "y'all ain't got the honey nut?"

如何将该字符串转换为数组?

4

4 回答 4

24

您可以使用以下约定创建一个项目的切片:

a := "y'all ain't got the honey nut?"
singleItemArray := []string{a}

strings.Join(singleItemArray);
于 2013-09-19T23:54:50.000 回答
9

[]string{"string"}正如 miltonb 所说,您的问题的实际答案很简单。

但我想指出的是,在 Go 中编写和使用可变参数函数是多么容易,一个具有可变数量参数的函数。

您可以将函数的签名更改为F(a ...string). 然后,a是函数中的切片F,你可以像F("a")and一样调用它F("a", "b")。当你实际上有一个切片或数组时,你可以通过调用将它传递给 F F(a...)

不确定这种语法是否适合你的工作,但我想让你知道它是一种选择。

于 2013-09-20T05:33:59.877 回答
2

措辞的问题实际上引用了数组和切片。问题文本是关于一个数组的,代码是使用切片来说明的。因此,隐含了两个问题;传递单个项目切片,并传递单个项目数组。

一个数组: var a [1]string 一个切片:var s []string

将单个项目切片传递给函数:

func SliceFunc( slc []string) {
    fmt.Println(slc)
}

func main() {
    a := "stringy"
    SliceFunc( []string{a} )
    // or an actual array to the same function
    b := [...]string { "thingy" }
    SliceFunc( []string{b[0] )  
}

将单个项目数组传递给函数。

这里有一个问题,因为数组具有固定长度,并且作为函数的参数,它不能接受不同长度的数组,所以我们只剩下灵活性有限的工作函数:

func ArrayFunc( arr [1]string) {
    fmt.Println(slc)
}

func main() {
    var a [1]string
    a[0] = "stringy"
    ArrayFunc( a )  
}

似乎坚持切片的泛化是一种更灵活的解决方案。

(如果您想了解更多关于切片和数组的信息,请参见 Andrew Gerrand 的一篇博客,其中介绍了切片的使用和内部结构。)

于 2013-09-20T00:31:17.093 回答
0

您可以使用appendmake

package main
import "fmt"

func main() {
   {
      var a []string
      a = append(a, "north")
      fmt.Println(a)
   }
   {
      a := make([]string, 1)
      a[0] = "north"
      fmt.Println(a)
   }
}

https://golang.org/pkg/builtin

于 2021-05-19T23:39:49.910 回答