假设一个函数采用一串字符串:
func Join(strs []string) {
...
}
我有一个字符串:
a := "y'all ain't got the honey nut?"
如何将该字符串转换为数组?
答案 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)
您可以使用 append
或 make
:
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)
}
}