2013-05-31 42 views
4

Go是一個string就像C++中的char*或者C++中的string或其他類似的東西?Go中的字符串是什麼?

我不明白如何一個字符串可以是一個原始類型。

+2

快速谷歌搜索給了這個:http://golang.org/pkg/strings/ – Leri

+1

是的,但它沒有回答我的問題 – ghigt

+1

要回答你的問題,它將是有趣的,你看到一個字符串作爲原語類型。 – Mue

回答

17

中去的字符串被表示by this structure用C

struct String 
{ 
    byte* str; 
    intgo len; 
}; 

str指針指向實際字符串數據,但這不是NULL終止 - 該長度在len構件保持。

所以用C語言來說,去字符串離原始類型很遠,它是一個指針,一個長度和一個內存區域。

但是Go不是C,所有這些實現細節對Go程序都是不可見的。在一個字符串一個原始不可變類型。

6

The documentation for the type string說:

串是一組8位字節的所有字符串的,通常但不一定代表UTF-8編碼的文本。一個字符串可能是空的,但不是零。字符串類型的值是不可變的。

他們是不可改變的,這似乎讓他們不像你比較到C的概念,而更像也許const char []其中const真正含義const

任何東西都可以是編程語言中的原始類型,它取決於設計者。 「作爲一個原始人」並不一定意味着你實際上是原始人。 :)

+0

與此類似,Go的頻道是用小數據結構實現的。您不需要/不知道這些結構中的內容,纔能有效地使用渠道。 Go的地圖也是如此,即使這些地圖是不同的,因爲它們是可變的。 –