Go語言2-基礎類型及使用

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

1、變數

 1)變數聲明 格式:var 變數名 變數類型
     var v1 int     var v2 string     var v3 [10]int         //整型數組     var v4 []int           //切片     var v5 struct {        //結構         f int     }     var v6 *int            //指標     var v7 map[string]int  //map,key為string類型,value為int類型     var v8 func(a int) int     var (                  //多個var 省略為一個         v1 int         v2 string     )
 2)變數初始化 格式1:變數名 = 值         //註:此處的v1必須是已聲明的
    v1 = 10
 格式2:變數名 := 值        //註:此處的V1必須是未聲明的
    v1 := 10
 格式3:var 變數名 = 值     //註:該格式為聲明時直接賦值
     var v1 = 10
 3)變數賦值 格式:變數名 = 值
     v1 = 10
 這裡介紹下Go語言的一個小特性
    i,j = j,i
 上面語句的意思為將i與j的值對調,如果在Java中實現該賦值,則需要引入臨時變數


 4)匿名變數 匿名變數一般在多傳回值函數時使用,當調用一個多傳回值函數時,為了只擷取一個值, 又不想給每個傳回值都定義一個變數名,此時就可以使用匿名變數,使用“_”來進行佔位
    ret1,_:= MutipleReturnFunc()

2、常量

 1)字面常量 所謂字面常量是指程式中硬式編碼常量
     -12     3.1415926     true     "foo"
 2)常量定義 格式:const 常量名 [類型] [= 常量值] //[]表示可以沒有該內容
     const Pi float64 = 3.1415926          const zero = 0.0          const (              size int64 = 1024              eof = -1     )     const u,v float64 = 0,3     //u=0.0,v=3.0 常量多重賦值     const mask = 1 << 3         //編譯期行為運算式,不可以是運行期運算式
 3)預定義常量 Go言預定義了三個常量:true、false和iota iota比較特殊,可以被認為是一個可被編譯器個性的常量,在每個const關鍵字出現時被重設為0, 在下個const出現之前,每出現一次iota其所代表的數字會自動增1
     const (          Byte = 1 << (10 * iota)          //Byte = 1          KB   = 1 << (10 * iota)          //KB   = 1024          MB   = 1 << (10 * iota)          //MB   = 1048576          GB   = 1 << (10 * iota)          //GB   = 1073741824     )     const v1 = iota                       //0,iota又重設為0了
 註:這裡有一個小特性,在Go中,如果在同一個const第一個常量在定義時進行了賦值, 而後續其它常量沒有進行賦值,則後續常量將延用第一個賦的值或運算式 如下面的定義語句等同於上面的語句
     const (          Byte = 1 << (10 * iota)          //Byte = 1          KB                               //KB   = 1024          MB                               //MB   = 1048576          GB                               //GB   = 1073741824     )
 4)枚舉 Go語言工不支援enum關鍵字來定義枚舉,因此Go語言的枚舉其實只是一系列相關常量
     const (          Sunday = iota          Monday          Tuesday          Wednesday          Thursday          Friday          Saturday     )

3、資料類型(基礎)
Go語言的資料類型包含以下幾種基礎類型和複合類型(將在另外一篇博文中講解)

 基礎類型: 1)布爾類型:bool,不支援其它類型的轉換(除使用函數外) 2)整型     int8   :[-128,127]     int16  :[-32768,32767]     int32  :[-2 147 483 648,2 147 483 647]     int64  :[-9 223 372 036 854 775 808,9 223 372 036 854 775 807]     int    :依賴不同平台下的實現,可以是int32(大小)或int64(大小),自動推導     uint8  :又名byte,[0,255]     uint16 :[0,65535]     uint32 :又名rune,[0,4 294 967 295]     uint64 :[0,18 446 744 073 709 551 615]     uint   :依賴不同平台下的實現,可以是uint32(大小)或uint64(大小)     uintprt:恰好容納指標值的類型,對32位平台是unit32,對64位平台是unit64 註:不同類型的整型被認為是不同類型,它們之間無法做賦值、比較運算。    在Go語言中,沒有++與--操作符,僅有"值++"與"值--"文法 如下面的寫法為錯誤寫法。
     var v1 int32     v2 := 64                 //v2被自動推導為int類型     v1 = v2                  //不管為幾位系統均編譯錯誤     v1 = int32(v2)           //顯示類型轉換     equal := (v1 == v2)      //編譯錯誤     v1++                     //正確,中間不能有空格     ++v1                     //編譯錯誤
 3)浮點型:float32 float64(自動推導) 同整型一樣,不同類型的浮點型是被認為是不同類型他們之間無法做賦值、比較運算。 因為浮點數不是一種精確的表達方式(電腦為二進位,二進位無法準確的表示小數), 所以如果直接使用==判斷兩個浮點數是否相等可能會導致不穩定的結果,這裡給出一個替代方案
     var v1, v2 float64 = 3.14, 3.14     fmt.Println(v1 == v2)                 //在這裡,本行列印為true     fmt.Println(math.Dim(v1, v2) < 0.01)  //0.01表示精度,本行列印為true
 4)字串類型:string 使用""(雙引號,轉義符會被轉義)或者``(反引號,字元保持不變)來建立 字串類型支援"+="及"+"操作符進行這符串聯接
     str1      := "Hello"        //字串賦值     str        ="Hello\nWorld"  //列印str的話,會有換行     str        =`Hello\nWorld`  //列印結果Hello\nWorld     firstChar := str1[0]        //取字串第一個字元     str1[0]    = 'h'            //編譯錯誤,字串的內容不能在初始化後被修改     str       := str1 +" World" //字元中串連操作     strLen    := lent(str)      //字串長度,這裡的值為11     strCn     :="Hello,世界"    //包含中文的字串     strCnLen  := lent(strCn)    //字串長度,這裡的值為12,在UTF-8中,一個中文佔三個位元組     str       +="appendStr"     //追加字串     str        ="Hello"+"World" //拼接字串     str        ="Hello"+                 "World"         //+號不能放在行首     str        ="Hello"                 +"World"        //編譯錯誤     sb        := bytes.Buffer{} //使用buffer拼接     sb.WriteString("hello ")     sb.WriteString("world")     str       := sb.String()
 5)字元類型: 使用''(單引號)建立 byte,實際上是uint8的別名,代表UTF-8字串的單個位元組值 rune,代表單個Unicode字元 6)類型的零值(變數被聲明為某種類型後的預設值) 通常情況下,數實值型別的預設值為0,bool為false,string為空白字串 7)類型轉換 Go語言不支援隱式轉換,所有類型轉換必須顯式聲明,Go是一個型別安全的程式設計語言 轉換隻有發生在兩種相互相容的類型之間 格式:ValueA [:]= TypeOfValueA(ValueB)
     var a float64 = 1.1     b := int(a)                  //會發生精度損失     var c bool  = false     d := int(c)                  //編譯錯誤
 這裡在講一下比較常見的int->string,string->int,這個無法直接轉換,需要藉助strconv包
     str  := strconv.Itoa(intV)     intV := strconv.Atoi(str)

至此,基礎類型及使用已經講解完,後續還會有其它的Go語言博文。

這裡也給大家推薦一篇外文的翻譯,《Java程式員快速入門 go 語言》(英文原文:Go for Java programmers),這篇文章對於Java程式員入門Go語言是個好文章。

無聞(unknow)《Go編程基礎》
許式偉的 《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.