golang入門篇-基礎類型

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

golang有如下基本類型:

  • 整數類型: int8、int16等等
  • 浮點類型:float32、float64
  • 布爾類型:bool
  • 複數類型: complex64、complex128
  • 字串類型: string
  • 字元類型: byte、rune

整數類型

整型轉換

golang中的編譯器不會做隱式的類型轉換,int和int32是倆種不同的類型。

var value2 int32value1 := 64           // value1將會被自動推導為 int類型value2 = value1        // 編譯錯誤value2 = int32(value1) // 強制類型轉換編譯通過

在做強制類型轉換時,需要注意資料長度被截短而發生的資料精度損失(比如將浮點數強制轉為整數)和值溢出(值超過轉換的目標類型的值範圍時)問題。

整型運算

golang支援常規的整數運算: + - * / % 即加減乘除模數運算。

整型比較

golang支援常規的比較子: > < == >= <= !=
需要注意的是兩種不同的整數類型變數不能直接比較,比如int8類型變數和int類型變數不能直接比較,但是整型常量編譯器會自動推斷類型,所以整型常量可以與任何整型變數比較。

var x int8var y int16x = 1y = 1if x == y {                 // 編譯錯誤    fmt.Println("x == y")}if x == 1 &&  y == 1 {      // 編譯通過    fmt.Println("x == y")}

位元運算

布爾類型

golang中的布爾類型,關鍵字為bool,預定義的值為true和false
bool類型不支援自動和強制的類型轉換,只能通過預定義的值進行賦值,還有通過比較運算式推導。

var v1 boolv1 = truev2 := (1 == 2)    // v2也會被推導為 bool類型,值為falsev1 = 1            // 編譯錯誤不支援隱式類型轉換v1 = bool(1)      // 編譯錯誤不支援強制類型轉換v1 = (1 == 2)     // 編譯成功,值為false

浮點類型

golang中的浮點類型採用IEEE-754標準的表達方式。

浮點類型轉換

golang中的浮點類型共有倆個float32和float64,同c語言中的float和double。

var f1 float32f1 = 1f2 := 1.0           //  如果想讓f2被推導成浮點型,必須加.0, 否則被推導為整型而不是浮點型f1 = f2             //  編譯錯誤,浮點型會被自動推導成float64f1 = float32(f2)    //  編譯成功

浮點類型比較

浮點數的比較需要注意的是精度問題,像整型直接用==判斷倆浮點數是否相等是不可行的,
會產生不穩定的結果,所以實現一個浮點數的比較函數用來判等是可行的。

import "math"func IsEqual(f1, f2, p float64) bool {    // p為使用者自訂的比較精度,小於比較精度就可認為相等    return math.Fdim(f1, f2) < p   }

複數類型

複數是由倆個實數(浮點數表示)構成的,一個實部(real),一個虛部(image)。可以通過函數real(v)擷取複數的實部,函數image(v)擷取複數的虛部。

var v1 complex64        //  由2個float32構成的複數類型v1 = 1.2 + 12iv2 := 1.2 + 12i         //  v2 是complex128類型v3 := complex(1.2, 12)  //  v3 等於 v2x := real(v1)           //  x值為1.2y := real(v1)           //  y值為12

字元類型

golang中支援兩種字元類型,一種是byte(實際上是uint8的別名),代表UTF-8字串的單個位元組的值;另一種是rune,代表單個Unicode字元。unicode/utf8 包也提供了UTF8和Unicode之間的轉換。

字串操作

golang中字串也是一種基本類型,相比c/c++而且golang中的字串使用起來非常方便。
初始化:

var str1 string         // 聲明一個字串變數str1 = "Hello world"    // 字串賦值ch := str1[0]           // 取字串的第一個字元str2 := "Hello world"   // 直接初始化,推導為string類型str2[0] = 'a'           // 編譯錯誤,不支援初始化後修改內容str1 = str1 + str2      // str1的值變為了Hello worldHello world

字串的內容擷取與數組類似,都支援下標方式擷取。不同的數組可以修改內容,字串初始化後不能修改內容。字串支援串連操作,用+運算子實現。

字串遍曆

字串有倆種遍曆方式,一種是按byte字元遍曆,一種是按rune字元遍曆。

//按byte字元遍曆str := "Hello, 世界"for i := 0; i < len(str); i++ {    // 利用下標取字串中的字元,類型為 byte    ch := str[i]    fmt.Println(i, ch)}//按rune字元遍曆str := "Hello, 世界"for i, ch := range str {    // ch的類型為 rune,i為rune的索引下標    fmt.Println(i, ch)}

golang技術交流QQ群,歡迎志同道合的人一起來探討技術人生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.