1
type Node int
node, err := strconv.Atoi(num)

Foo(Node(node))  // Foo takes a Node, not an int

是否可以避免上面示例中丑陋的“节点(节点)”?有没有更惯用的方法来强制编译器将 node 视为 Node 而不是 int?

4

2 回答 2

3

没有什么真正优雅的。您可以定义一个中间变量

n, err := strconv.Atoi(num)
node := Node(n)

或者你可以定义一个包装函数

func parseNode(s string) Node {
    n, err := strconv.Atoi(num)
    return Node(n)
}

但我不认为有任何单线技巧。你这样做的方式似乎很好。在 Go 中,这里和那里仍然有一点口吃。

于 2012-12-06T11:19:11.080 回答
1

不会。转换转换(可转换的)表达式。如果函数只有一个返回值,则函数的返回值是一个术语(因此可能是一个可转换的表达式)。可以在此处找到对符合转换条件的表达式的其他限制。

于 2012-12-06T11:20:10.473 回答