Go語言基礎 - 基本數據類型

1、基本數據類型

1. 整型

uint8也就是bytegit

無符號整型 取值範圍
uint8 0 到 255
uint16 0 到 65535
uint32 0 到 4294967295
uint64 0 到 18446744073709551615

int16對應C語言中的short型,int64對應C語言中的longgithub

有符號整型 取值範圍
int8 -128 到 127
int16 -32768 到 32767
int32 -2147483648 到 2147483647
int64 -9223372036854775808 到 9223372036854775807

a. 特殊整型

在使用intuint類型時,不能假定它是32位或64位的整型,而是考慮intuint可能在不一樣平臺上的差別。數組

特殊整型 描述
uint 32位操做系統上就是uint32,64位操做系統上就是uint64
int 32位操做系統上就是int32,64位操做系統上就是int64
uintptr 無符號整型,長度被設定爲足夠存放一個指針

b. 數字字面量語法

const a = 0b00001101 // 二進制1101 == 十進制13
const b = 0333       // 0333 == 0o333,八進制333 == 十進制 64 * 3 + 3 * 8 + 3 = 219
const c = 0xAF       // 十六進制AF == 十進制 10 * 16 + 15 = 175

2. 浮點型

  • float32精確到小數點後7位,最大範圍可使用常量定義:math.MaxFloat32
  • float64精確到小數點後15位,最大範圍可使用常量定義:math.MaxFloat64。而且儘量地使用float64,由於math包中全部有關數學運算的函數都會要求接收這個類型
  • 使用==或者!=來比較浮點數時應當很是當心,最好在正式使用前測試對於精確度要求較高的運算

3. 複數

複數使用re+imI來表示,其中re表明實數部分,im表明虛數部分,I表明根號負1函數

  • complex64,32位實數和虛數
  • complex128,64位實數和虛數;最好使用complex128做爲計算類型,由於相關函數都使用這個類型的參數。
var c1 complex64 = 5 + 10i // 5 + 10i == complex(5, 10)
fmt.Printf("輸出:%v", c1) // 輸出:5+10i

4. 布爾值

布爾型數據只有truefalse兩個值,默認爲falsepost

五、字符串

字符串是一種值類型,且值不可變,更深刻地講,字符串是byte類型的固定長度數組。性能

Go語言支持如下2種形式字符串:測試

  1. 解釋字符串ui

    該類字符串使用雙引號括起來,其中的相關的轉義字符將被替換,這些轉義字符包括:編碼

    • \n:換行符
    • \r:回車符
    • \t:tab 鍵
    • \u\U:Unicode字符
    • \\:反斜槓自身
    • \':單引號
    • \":雙引號
  2. 非解釋字符串操作系統

    該類字符串使用反引號括起來,支持換行,例如:

    package main
    
    import "fmt"
    
    func main() {
        const a = `\n:這裏不會換行
    這裏纔會`
    
        // `\n:這裏不會換行
        // 這裏纔會` 做爲一個完整的字符串原樣輸出
        fmt.Println(a)
    }

字符串拼接符+

a := "我是A" + ",我5歲"
a += ",身高180cm"
fmt.Println(a) // 我是A,我5歲,身高180cm

字符:byterune類型

組成每一個字符串的元素叫作字符,能夠經過遍歷或者單個獲取字符串元素得到字符。 字符用單引號'包裹起來。

Go語言的字符有如下兩種:

  1. uint8類型,或者叫byte型,表明了ASCII碼的一個字符
  2. rune類型,表明一個UTF-8字符,rune類型實際是一個int32

Go語言使用了特殊的rune類型來處理Unicode,讓基於Unicode的文本處理更爲方便,也可使用byte型進行默認字符串處理,性能和擴展性都有照顧。

s := "byte,no,rune我是"

for i := 0; i < len(s); i++ { //byte
    fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()

for _, r := range s { //rune
    fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()

// 98(b) 121(y) 116(t) 101(e) 44(,) 110(n) 111(o) 44(,) 114(r) 117(u) 110(n) 101(e) 230(æ) 136() 145() 230(æ) 152() 175(¯)
// 98(b) 121(y) 116(t) 101(e) 44(,) 110(n) 111(o) 44(,) 114(r) 117(u) 110(n) 101(e) 25105(我) 26159(是)

由於UTF-8編碼下一個中文漢字由3~4個字節組成,因此咱們不能簡單的按照字節去遍歷一個包含中文的字符串,不然就會出現上面輸出中第一行的結果。

字符串底層是一個byte數組,因此能夠和[]byte類型相互轉換。字符串是不能修改的,字符串是由byte組成,因此字符串的長度是byte的長度。rune類型用來表示utf-8字符,一個rune字符由一個或多個byte組成。

2、類型轉換

Go語言中只有強制類型轉換,沒有隱式類型轉換。

a, b := 3, 4
var c int
// math.Sqrt()接收的參數是float64類型,須要強制轉換
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c) // 5

參考文獻

相關文章
相關標籤/搜索