go語言基本類型

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

這篇文章主要介紹了GO語言基本類型,較為詳細的分析了整形、浮點型、字串、指標等類型的具體用法,是深入學習GO語言所必須掌握的重要基礎,需要的朋友可以參考下
本文執行個體分析了GO語言基本類型。分享給大家供大家參考。具體如下:
一、整型
go語言有13種整形,其中有2種只是名字不同,實質是一樣的,所以,實質上go語言有11種整形。如下:
(1)int :依賴不同平台下的實現,可以是int32或int64
(2)int8 : (-128->127)
(3)int16: (-32768->32767)
(4)int32: (-2 147 483 648->2 147 483 647)
(5)int64 :(-9 223 372 036 854 775 808->9 223 372 036 854 775 807)
(6)unit : 依賴不同平台下的實現,可以是int32或int64
(7)unit8 (又名byte): (0->255)
(8)unit16 : (0->65535)
(9)unit32 (又名rune):  (0->4 294 967 295)
(10)unit64 : (0->18 446 744 073 709 551 615)
(11)unitptr : 恰好容納指標值的類型,對32位平台是unit32,對64位平台是unit64
(PS : 值得注意的是,go語言中沒有自動類型轉換,這意味著,除了上篇博文分析的比較子之外,其他的操作符基本需要類型轉換,才能進行操作。否則就是編譯錯誤)
二、浮點類型
go語言有2種類型的浮點和兩種類型的複數類型。
(1) float32(-3.402…×1038->3.402…×1038)
(2) float64(-1.797…×10308->+1.797…×10308)
(3) complex64( 實部、虛部都是一個float32 )
(4) complex128  ( 實部、虛部都是一個float64 )
(PS:標準庫math包中,包含了眾多數學函數,其中所有函數均使用float64,
標準庫math/cmplx包含眾多複數相關的數學函數,其中所有函數均使用complex128)
(PPS : 跟數學中一樣,Go語言使用尾碼 i 表示複數,例如 5 + 5.1i )
三、字串
Go語言的字串是用UTF-8編碼的變寬字元序列,每個字元都用一個或多個位元組表示。這與Java不同,Java是採用UTF-16來表示,每個字元都對應2個位元組。
(1)建立:一種是用雙引號(”)括起來,它表示可解析的字串,可以進行字元轉義。另一種是用單引號(’)括起來,它表示原生的字串,可以包含除反引號之外的任何字元,當然也可以換行。如下: 
複製代碼 代碼如下:
func test1() {
str1 := “\”it’s me!\””
str2 := "it's me,too"
fmt.Println(str1)
fmt.Println(str2)
}

輸出為:
“it’s me!”
“it’s me,too”
(2)Go語言的字串支援 “+=”操作,可以通過[n]擷取索引處的原始位元組、通過[n:m]、[n:]、[:m]來擷取位元組對應的字串,若字元被截段,顯示亂碼。如:
複製代碼 代碼如下:
func test1() {
str1 := “Go語言的字串是用UTF-8編碼的變寬字元序列,每個字元都用一個或多個位元組表示。”
fmt.Println(str1[4:15])
fmt.Println(str1[5:15])
fmt.Println(str1[5])
fmt.Println(str1[:5])
fmt.Println(len(str1)) //位元組數
fmt.Println(len([]rune(str1))) //字元數
}
輸出為 :
�言的字�
言的字�
232
Go語
109
41
(3)字串支援常規的比較子操作,比較子在記憶體中一個位元組一個位元組的比較字串。當然了,這個比較是按照utf-8編碼的順序進行比較的。
(4)上例的最後一個取字元數的操作:len([]rune(str1)),在Go語言中,一個字串可以可以用一個rune(又名int32)數組來表示,每個rune都表示一個單一的字元。如:
複製代碼 代碼如下:
func test1() {
str1 := “Go語言的字串是用UTF-8編碼的變寬字元序列,每個字元都用一個或多個位元組表示。”
for _, char := range []rune(str1) {
fmt.Println(char)
}
}
這個操作會將str1的每個字元數字直接列印出來
四、指標
(1)指標的本質,用一個簡單例子說明一下:
複製代碼 代碼如下:
func test2() {
a := “xyz”
b := “opq”
pa := &a //pa為指向a的指標
pp := &pa //pp為指向pa的指標
fmt.Println(a, b, *pa, **pp)
a += “zz” //a追加“zz”
fmt.Println(a, b, *pa, **pp)
*pa += “bb” //pp指向的值,追加”bb”
fmt.Println(a, b, *pa, **pp)
fmt.Println(“列印a各種情況:”, &a, a)
fmt.Println(“列印pa各種情況:”, &pa, pa, *pa)
fmt.Println(“列印pp各種情況:”, &pp, pp, *pp, **pp)
}
輸出如下:
xyz opq xyz xyz
xyzzz opq xyzzz xyzzz
xyzzzbb opq xyzzzbb xyzzzbb
列印a各種情況: 0xc0820001d0 xyzzzbb
列印pa各種情況: 0xc082038018 0xc0820001d0 xyzzzbb
列印pp各種情況: 0xc082038020 0xc082038018 0xc0820001d0 xyzzzbb
可見,指標的本質就是一個存放邏輯地址的變數。
(2)有兩種建立變數的文法,同時獲得指向它們的指標:new(Type) 和 &Type{}, 如下:
複製代碼 代碼如下:
type point struct {
x int
y int
}
func test3() {
a := point{1, 2}
b := new(point)
c := &point{}
d := &point{3, 4}
fmt.Println(a, b, c, d)
}
輸出為:
{1 2} &{0 0} &{0 0} &{3 4}
Go語言列印指向結構體的指標時,會列印解引用後的結構體內容,同時會將&作為首碼,表示它是一個指標。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.