如何在Go中创建一个项目的数组?

时间:2013-09-19 23:54:50

标签: go

假设一个函数采用一串字符串:

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

我有一个字符串:

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

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

4 个答案:

答案 0 :(得分:7)

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

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

strings.Join(singleItemArray);

答案 1 :(得分:5)

正如米尔顿布所说,问题的实际答案就像[]string{"string"}一样简单。

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

您可以将功能的签名更改为F(a ...string)。然后,a是函数F中的切片,您可以将其称为F("a")F("a", "b")。当您实际拥有切片或数组时,可以通过调用F(a...)将其传递给F。

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

答案 2 :(得分: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 )  
}

似乎对切片的概括是一种更灵活的解决方案。

(如果你想更多关于切片和阵列这里有一篇由安德鲁·格兰德撰写的关于go slices usage and internals的博客。)

答案 3 :(得分: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