假设我有一个int64变量(或其他整数大小)表示一个有效的unicode代码点,并且我想在Go中将它转换为符文,我该怎么办?转换int转换为符号
在C我会用一个类型转换是这样的:
c = (char) i; // 7 bit ascii only
但在围棋,一种说法是行不通的:
c, err = rune.(i)
建议?
假设我有一个int64变量(或其他整数大小)表示一个有效的unicode代码点,并且我想在Go中将它转换为符文,我该怎么办?转换int转换为符号
在C我会用一个类型转换是这样的:
c = (char) i; // 7 bit ascii only
但在围棋,一种说法是行不通的:
c, err = rune.(i)
建议?
你只想要rune(i)
。铸造通过type(x)
完成。
类型断言是不同的。当您需要从较不具体的类型(如interface{}
)转到更具体的类型时,可以使用类型断言。此外,在编译时检查转换,其中类型断言在运行时发生。
这里是你如何使用类型断言:
var (
x interface{}
y int
z string
)
x = 3
// x is now essentially boxed. Its type is interface{}, but it contains an int.
// This is somewhat analogous to the Object type in other languages
// (though not exactly).
y = x.(int) // succeeds
z = x.(string) // compiles, but fails at runtime
在走,你想要做一个转换。
换算的形式为
T(x)
的表达式,其中T
是一种类型和x
是可被转换为类型T
的表达式。Conversion = Type "(" Expression ")" .
非恒定值
x
可以转换为键入任何这些 例T
:
x
是分配给T
。x
的类型和T
具有相同的基础类型。x
的类型和T
是未命名的指针类型,它们的指针基类型具有相同的基础类型。x
的类型和T
都是整数或浮点类型。x
的类型和T
都是复杂类型。x
是一个整数或具有类型[]byte
或[]rune
和T
是一个字符串类型。x
是一个字符串,T
是[]byte
或[]rune
。
要转换x
,int
型,int32
,或int64
,要rune
类型,int32
类型的别名的T
。x
的类型和T
都是整数类型。
因此,T(x)
是允许的,并写为rune(x)
,例如,c = rune(i)
。
[tag:casting]标签将转换定义为“如果允许转换,则将对象类型显式转换为另一种类型的过程”。 “铸造”不会成为Go称为“转化”的语言不可知论词吗?我认为在问题上留下标签是有价值的,除非意识的差异比我意识到的要强。 (在这种情况下,我很乐意进行澄清。) –
转换和转换是不同的。 Go做转换,而不是转换。堆栈溢出标记描述与权威很远。 – peterSO
谷歌搜索,我仍然很难发现是否有差异。我发现很多东西,例如“Casting代表程序员请求做显式类型转换”。这就是我对铸造的看法,我认为这就是典型的程序员对它的看法。请澄清重要的区别,或者让我们添加标签,让人们更容易找到这个问题(以及您的有用答案),当(很可理解,就我而言)搜索“'[go] [cast ]'“或类似的。 –
D'oh!这很好用:使用类型名称看起来像一个函数调用来投。不知何故,在整个教程中,我发现了很多关于类型断言的内容,但很少涉及到投射。 – Roboprog
有趣的是,我用java的instanceof方式使用类型断言,但就像我说的,还没有穿过简单的演员表。谢谢您的帮助! – Roboprog