2013-04-13 73 views
4

假設我有一個int64變量(或其他整數大小)表示一個有效的unicode代碼點,並且我想在Go中將它轉換爲符文,我該怎麼辦?轉換int轉換爲符號

在C我會用一個類型轉換是這樣的:

c = (char) i; // 7 bit ascii only 

但在圍棋,一種說法是行不通的:

c, err = rune.(i) 

建議?

回答

11

你只想要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 
+0

D'oh!這很好用:使用類型名稱看起來像一個函數調用來投。不知何故,在整個教程中,我發現了很多關於類型斷言的內容,但很少涉及到投射。 – Roboprog

+0

有趣的是,我用java的instanceof方式使用類型斷言,但就像我說的,還沒有穿過簡單的演員表。謝謝您的幫助! – Roboprog

2

在走,你想要做一個轉換。

Conversions

換算的形式爲T(x)的表達式,其中T是一種類型和 x是可被轉換爲類型T的表達式。

Conversion = Type "(" Expression ")" . 

非恆定值x可以轉換爲鍵入任何這些 例T

  • x是分配給T
  • x的類型和T具有相同的基礎類型。
  • x的類型和T是未命名的指針類型,它們的指針基類型具有相同的基礎類型。
  • x的類型和T都是整數或浮點類型。
  • x的類型和T都是複雜類型。
  • x是一個整數或具有類型[]byte[]runeT是一個字符串類型。
  • x是一個字符串,T[]byte[]rune

要轉換xint型,int32,或int64,要rune類型,int32類型的別名的Tx的類型和T都是整數類型。

因此,T(x)是允許的,並寫爲rune(x),例如,c = rune(i)

+0

[tag:casting]標籤將轉換定義爲「如果允許轉換,則將對象類型顯式轉換爲另一種類型的過程」。 「鑄造」不會成爲Go稱爲「轉化」的語言不可知論詞嗎?我認爲在問題上留下標籤是有價值的,除非意識的差異比我意識到的要強。 (在這種情況下,我很樂意進行澄清。) –

+0

轉換和轉換是不同的。 Go做轉換,而不是轉換。堆棧溢出標記描述與權威很遠。 – peterSO

+1

谷歌搜索,我仍然很難發現是否有差異。我發現很多東西,例如「Casting代表程序員請求做顯式類型轉換」。這就是我對鑄造的看法,我認爲這就是典型的程序員對它的看法。請澄清重要的區別,或者讓我們添加標籤,讓人們更容易找到這個問題(以及您的有用答案),當(很可理解,就我而言)搜索「'[go] [cast ]'「或類似的。 –