Go語言中基本數據類型初識

在Go語言中經常使用的基本數據類型有以下幾種:數組

  • 整型
  • 浮點型
  • 布爾類型
  • 複數
  • 字符串

整型

  • 有符號
    • int8
    • int16
    • int32
    • int64
  • 無符號
    • uint8
    • uint16
    • uint32
    • uint64
  • 特殊整型
    • uint,32位操做系統就是uint32,64位操做系統就是uint64
    • int,32位操做系統就是int32,64位操做系統就是int64
    • uintptr,無符號整型,用於存放指針

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

進制

// 程序入口
func main() {
    // age = "17"
    // fmt.Println("Hello World")
    // fmt.Print("isOK")
    // fmt.Printf("Age: %s", age)\n
    var a1 = 10
    fmt.Printf("十進制:%d\n", a1)
    fmt.Printf("二進制:%b\n", a1)
    fmt.Printf("八進制:%o\n", a1)
    fmt.Printf("十六進制:%x\n", a1)

    // 直接定義八進制
    a2 := 077
    fmt.Printf("直接聲明八進制:%d\n", a2)
    // 直接定義十六進制
    a3 := 0x12321
    fmt.Printf("直接聲明十六進制:%d\n", a3)
}

浮點型

Go語言支持兩種浮點型:ide

  • float32,使用常量math.MaxFloat32來定義;
  • float64,使用常量math.MaxFloat64來定義;

打印浮點數,能夠用fmt包配合%f ,以下:函數

package main
import (
        "fmt"
        "math"
)
func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

布爾類型

Go語言中以bool類型進行聲明布爾型數據,布爾型數據只有true(真)false(假)兩個值。性能

注意:ui

  1. 布爾類型變量的默認值爲false
  2. Go 語言中不容許將整型強制轉換爲布爾型.
  3. 布爾型沒法參與數值運算,也沒法與其餘類型進行轉換。

複數

複數有實部和虛部,complex64的實部和虛部爲32位,complex128的實部和虛部爲64位。以下:編碼

func main(){
    var c1 complex64
    c1 = 1 + 2i
    var c2 complex128
    c2 = 2 + 3i
    fmt.Println(c1)
    fmt.Println(c2)
}

子符串

Go語言中的字符串以原生數據類型出現,使用字符串就像使用其餘原生數據類型(int、bool、float3二、float64 等)同樣。 Go 語言裏的字符串的內部實現使用UTF-8編碼。 字符串的值爲雙引號(")中的內容,能夠在Go語言的源碼中直接添加非ASCII碼字符,例如:操作系統

s1 := "Joker"
s2 := "HelloWorld"

若是是多行字符串,則是用反引號,它裏面的內容會原樣輸出,好比:指針

s1 := `
    你好,
    歡迎光臨。
`

字符

組成每一個字符串的元素叫作字符字符'' 括起來,以下:code

s1 := 'H'
s2 := '你'

Go語言中的字符有兩種:

  • uint8類型,或者叫byte型,表明ASCII 碼的一個符號;
  • rune類型,表明一個UTF-8 符號;

當須要處理中文、日文或者其餘複合字符時,則須要用到rune類型。rune類型實際是一個int32

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

package main

import "fmt"

func main() {
    s1 := "Hello World,你好啊!"
    // fmt.Printf(s1)
    // 遍歷字符串,Byte類型
    for i := 0; i < len(s1); i++ {
        fmt.Printf("%v(%c)", s1[i], s1[i])
    }
    fmt.Println()
    // 遍歷字符串,rune類型
    for _, r := range s1 {
        fmt.Printf("%v(%c)", r, r)
    }
}

其輸出結果以下:

72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)239(ï)188(¼)140()228(ä)189(½)160( )229(å)165(¥)189(½)229(å)149(
)138()239(ï)188(¼)129()
===============================================
72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)65292(,)20320(你)22909(好)21834(啊)65281(!)

從上能夠看到,第一種遍歷方法是按字節進行遍歷的,而對於非英文字母或者數字來講,其佔用的並不是一個字節,好比中文在UTF-8 編碼中就佔用3個字節,這時候若是咱們按着字節來遍歷就會獲得第一種結果,這種結果並非咱們想要的。咱們就須要採用第二用遍歷方式,rune類型用來 表示UTF-8 字符,一個rune字符由一個或者多個字節組成。

字符串轉義

特殊字符串須要保持其原生的意義,就須要對其進行轉義,經常使用的以下表:

轉義符 含義
\r 回車
\n 換行
\t 製表
\' 單引號
\\ 反斜槓
\" 雙引號

好比:

package main

import "fmt"

func main() {
    s1 := "\"Hello World\""
    fmt.Printf(s1)
}

字符串的經常使用操做

方法 做用
len(s) 求長度(是字節的長度)
+或者fmt.Sprintf 字符串拼接
strings.Split 字符串切割
strings.contains 判斷字符串中是否包含
strings.HasPrefix,strings.HasSuffix 判斷字符串的前綴/後綴(布爾類型)
strings.Index(),strings.LastIndex() 輸出子串出現的位置(索引)
strings.Join(a[]string, sep string) join操做

例子:

package main

import "fmt"
import "strings"

func main() {
    s := "Hello World 你好啊!"
    // 求長度
    fmt.Println(len(s))
    // 字符串拼接
    s1 := "Joker"
    s2 := "你好"
    fmt.Println(s1 + s2)
    s12 := fmt.Sprintf("%s%s", s1, s2)
    fmt.Println(s12)
    // 字符串切割
    sSplit := strings.Split(s, " ")
    fmt.Println(sSplit)
    // 判斷字符串是否包含
    fmt.Println(strings.Contains(s, "H"))
    fmt.Println(strings.Contains(s, "L"))
    // 判斷字符串的前綴
    fmt.Println(strings.HasPrefix(s, "H"))
    // 判斷字符串的後綴
    fmt.Println(strings.HasSuffix(s, "啊"))
    // 判斷字串出現的位置
    fmt.Println(strings.Index(s, "H"))
    // 判斷子串最後出現的位置
    fmt.Println(strings.LastIndex(s, "o"))
    // join操做
    fmt.Println(strings.Join(sSplit, "-"))
}

字符串的修改

要修改字符串,須要先將其轉換成[]rune[]byte,完成後再轉換爲string。不管哪一種轉換,都會從新分配內存,並複製字節數組。

package main

import "fmt"

func main() {
    s1 := "hello"
    // 一、強制轉換
    byteS1 := []byte(s1)
    // 二、進行修改
    byteS1[0] = 'H'
    // 三、強制轉換成字符串並打印
    fmt.Println(string(byteS1))

    s2 := "我愛你中國"
    // 一、強制轉換
    runeS2 := []rune(s2)
    // 二、修改
    runeS2[3] = '祖'
    // 三、強制轉換成字符串並打印
    fmt.Println(string(runeS2))
}

類型轉換

Go語言中只有強制類型轉換,沒有隱式類型轉換。該語法只能在兩個類型之間支持相互轉換的時候使用。

強制類型轉換的基本語法以下:

T(表達式)

其中,T表示要轉換的類型。表達式包括變量、複雜算子和函數返回值等.

相關文章
相關標籤/搜索