type Node int
node, err := strconv.Atoi(num)
Foo(Node(node)) // Foo takes a Node, not an int
是否可以避免上面示例中丑陋的“节点(节点)”?有没有更惯用的方法来强制编译器将 node 视为 Node 而不是 int?
type Node int
node, err := strconv.Atoi(num)
Foo(Node(node)) // Foo takes a Node, not an int
是否可以避免上面示例中丑陋的“节点(节点)”?有没有更惯用的方法来强制编译器将 node 视为 Node 而不是 int?
没有什么真正优雅的。您可以定义一个中间变量
n, err := strconv.Atoi(num)
node := Node(n)
或者你可以定义一个包装函数
func parseNode(s string) Node {
n, err := strconv.Atoi(num)
return Node(n)
}
但我不认为有任何单线技巧。你这样做的方式似乎很好。在 Go 中,这里和那里仍然有一点口吃。
不会。转换转换(可转换的)表达式。如果函数只有一个返回值,则函数的返回值是一个术语(因此可能是一个可转换的表达式)。可以在此处找到对符合转换条件的表达式的其他限制。