假设一个函数接受一个字符串数组:
func Join(strs []string) {
...
}
我有一个字符串:
a := "y'all ain't got the honey nut?"
如何将该字符串转换为数组?
假设一个函数接受一个字符串数组:
func Join(strs []string) {
...
}
我有一个字符串:
a := "y'all ain't got the honey nut?"
如何将该字符串转换为数组?
您可以使用以下约定创建一个项目的切片:
a := "y'all ain't got the honey nut?"
singleItemArray := []string{a}
strings.Join(singleItemArray);
[]string{"string"}
正如 miltonb 所说,您的问题的实际答案很简单。
但我想指出的是,在 Go 中编写和使用可变参数函数是多么容易,一个具有可变数量参数的函数。
您可以将函数的签名更改为F(a ...string)
. 然后,a
是函数中的切片F
,你可以像F("a")
and一样调用它F("a", "b")
。当你实际上有一个切片或数组时,你可以通过调用将它传递给 F F(a...)
。
不确定这种语法是否适合你的工作,但我想让你知道它是一种选择。
措辞的问题实际上引用了数组和切片。问题文本是关于一个数组的,代码是使用切片来说明的。因此,隐含了两个问题;传递单个项目切片,并传递单个项目数组。
一个数组: 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 的一篇博客,其中介绍了切片的使用和内部结构。)
您可以使用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)
}
}