2

在 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类型有一些方法,如果我没记错的话,需要命名类型而不是使用未命名类型作为不允许的接收器。

谢谢。

4

1 回答 1

3

Go 编程语言规范

可分配性

在 [本例] 中,值 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
于 2013-10-31T21:20:31.237 回答