在Go中,将字符串类型数组转换为字符串数组的最佳方法是什么

时间:2015-01-19 17:36:52

标签: go

以下代码

package main

import "strings"
import "fmt"

type Foo string

const (
    Bar    Foo = "bar"
    Snafu      = "snafu"
    Foobar     = "foobar"
)

var Foos = []Foo{Bar, Snafu, Foobar}

func main() {
    fmt.Println("Foos: " + strings.Join(Foos, ","))
}

产生此错误:

./test.go:17: cannot use Foos (type []Foo) as type []string in argument to strings.Join

这是有道理的,因为Foo不是字符串,但它是从字符串派生的。有没有办法强迫" [] Foo" to" [] string"没有复制?

1 个答案:

答案 0 :(得分:2)

几乎最好也是唯一的方法是循环切片的Foo对象,如同(导致副本):

func main() {
    results := make([]string, 0)
    for _, r := range Foos{
       results = append(results, string(r))
    }
    fmt.Println("Foos: " + strings.Join(results, ","))
}

不幸的是,截至目前,Go不支持概念类型强制并需要副本。作为替代方案,您可以键入别名[] Foo并向其添加Stringer方法,因此封装了以下详细信息:http://play.golang.org/p/FuOoLNrCvD

有关类似问题,请参阅以下内容:Cannot convert []string to []interface {}