假設我有一個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