在go中我有一个命名类型
type identifier string
我正在使用返回[]string
的标准库方法,我希望将其转换为[]identifier
。除了:
...
stdLibStrings := re.FindAllString(myRe, -1)
identifiers := make([]identifier, len(stdLibStrings))
for i, s := range stdLibStrings {
identifiers[i] = identifier(s)
}
我的最终目标是让这个名为identifier
的类型有一些方法,如果我没有弄错的话,需要一个命名类型,而不是使用未命名的类型作为不允许的接收器。
感谢。
答案 0 :(得分:3)
The Go Programming Language Specification
值x可赋值给T类型的变量(“x可赋值给 [本例]中的T“):
x的类型V和T具有相同的基础类型和至少一个V 或T不是命名类型。
例如,
package main
import "fmt"
type Indentifier string
func (i Indentifier) Translate() string {
return "Translate " + string(i)
}
type Identifiers []string
func main() {
stdLibStrings := []string{"s0", "s1"}
fmt.Printf("%v %T\n", stdLibStrings, stdLibStrings)
identifiers := Identifiers(stdLibStrings)
fmt.Printf("%v %T\n", identifiers, identifiers)
for _, i := range identifiers {
t := Indentifier(i).Translate()
fmt.Println(t)
}
}
输出:
[s0 s1] []string
[s0 s1] main.Identifiers
Translate s0
Translate s1