第 4 節:基礎資料型別

kuibatian發表於2019-11-15
型別 名稱 長度 零值 說明
bool 布林型別 1 false 其值不為真即為假,不可以用數字代表true或false
byte 位元組型 1 0 uint8別名
int, uint 整型 4或8 0 有符號32位或無符號64位
int8 整型 1 0 -128 ~ 127,
uint8 整型 1 0 0 ~ 255
int16 整型 2 0 -32768 ~ 32767,
uint16 整型 2 0 0 ~ 65535
int32 整型 4 0 -2147483648 到 2147483647
uint32 整型 4 0 0 到 4294967295(42億)
int64 整型 8 0 -9223372036854775808到 92233720368547758070
uint64 整型 8 0 到 18446744073709551615(1844京)
float32 浮點型 4 0.0 小數位精確到7位
float64 浮點型 8 0.0 小數位精確到15位
string 字串 "" utf-8字串

下面我們看一下幾個非常重要的型別,其它型別隨著課程的深入,後面會給大家講解到

1:布林型別

在計算機中,我們用什麼資料型別來表示一句話的對錯,例如:在計算機中描述張三(20歲)比李四(18)小,這句話的結果?
布林型別的變數取值要麼是真(true),要麼是假(false),用bool關鍵字來進行定義。示例如下:


package main
// 09
import "fmt"

func main() {
    //布林型別  值為true 或者為 false
    //var a bool //預設值為false
    ////bool型別一般用於條件判斷
    //a = true
    //fmt.Println(a)

    //自動推到型別建立bool型別變數
    a := false //bool

    //a=true
    //fmt.Println(a)
    //%T是一個佔位符 表示輸出一個變數對應的資料型別
    fmt.Printf("%T\n", a)
    b := 10 //int
    fmt.Printf("%T\n", b)
    c := 3.14 //float64
    fmt.Printf("%T\n", c)
    d := "你個錘子"//string
    fmt.Printf("%T", d)
}

布林型別主要用於後面講解的條件判斷,關於條件判斷,我們在這裡先舉一個生活中的案例,大家可以理解一下:

title

2:浮點型

package main

import "fmt"

func main0101() {

    //浮點型資料 分為 單精度浮點型 float32(小數位數為7位) 雙精度浮點型 float64(小數位數為15位)
    //float64 比 float32 更精準
    //var a float64=1223.456
    ////保留六位小數資料會更精準
    //fmt.Printf("%f\n",a)
    //var a float32 =3.14
    //
    //fmt.Printf("%.2f",a)

    //通過自動推到型別建立的浮點型變數 預設型別為float64
    a := 123.456
    fmt.Printf("%T\n", a)
}

//買黃瓜 3.2一斤 買3斤

func main() {
    price := 3.2
    var weight float64

    fmt.Scan(&weight)

    sum := price * weight

    //fmt.Println(sum)
    fmt.Printf("%.2f",sum)
}

3:字元型別

package main

import "fmt"

func main0201() {
    //byte字元型別 同時也是uint8的別名
    var a byte = 'a'

    //所有的字元都對應ASCII中的整型資料
    //'0'對應的48  'A'對應的65 'a' 對應的97
    //fmt.Println(a)

    //%c是一個佔位符 表示列印輸出一個字元
    fmt.Printf("%c\n", a)
    fmt.Printf("%c\n", 97)

    fmt.Printf("%T\n", a)
    var b byte = '0' //字元0  對應的ASCII值為為48

    fmt.Printf("%c\n", 48)
    fmt.Printf("%c\n", b)
}
func main0202() {

    var a byte = 'a'
    //將小寫字母轉成大寫字母輸出
    fmt.Printf("%c", a-32)
}

func main() {
    //轉義字元 \n 換行

    //var a byte = '\n'
    //\0  對應的ASCII 值為0 用於字串的結束標誌
    //\t 對應的ASCII 值為9 水平製表符 一次跳八個空格
    var a byte ='\t'
    //fmt.Println(a)
    fmt.Printf("%c",a)

}

4:字串型別

package main

import "fmt"

func main0301() {
    //var a string = "你好"
    ////fmt.Println(a)
    //fmt.Printf("%s",a)
    //a:="你好"
    //fmt.Println(a)
    //fmt.Printf("%s",a)
    //雙引號引起來的稱為字串
    ch := 'a'
    str := "a" //'a''\0'字串結束標誌

    fmt.Printf("%c\n", ch)
    //%s列印字串列印到\0之前的內容
    fmt.Printf("%s\n", str)

}

func main0302() {
    // 字元與字串區別
    //len 函式  用來計算字串中字元個數 不包含\0  返回值為int型別
    //a := "hello"
    //在go語言中一個漢字佔3個字元  為了和linux進行統一處理
    a := "bokedu"
    var count int
    count = len(a)
    fmt.Println(count)

}
func main() {
    str1 := "澳門線上賭場上線了"
    str2 := "性感荷官線上發牌"

    //字串連線  +
    str3 := str1 + str2

    fmt.Println(str3)

}

5:字元與字串區別

上面的程式碼中已經實現

6:fmt包的格式化輸出輸入

我們前面在輸出與輸入字串型別,字元型別,整型等都指定了對應的格式化,那麼go語言中還有哪些格式化呢?

格式 含義
%% 一個%字面量
%b 一個二進位制整數值(基數為2),或者是一個(高階的)用科學計數法表示的指數為2的浮點數
%c 字元型。可以把輸入的數字按照ASCII碼相應轉換為對應的字元
%d 一個十進位制數值(基數為10)
%e 以科學記數法e表示的浮點數或者複數值
%E 以科學記數法E表示的浮點數或者複數值
%f 以標準記數法表示的浮點數或者複數值
%g 以%e或者%f表示的浮點數或者複數,任何一個都以最為緊湊的方式輸出
%G 以%E或者%f表示的浮點數或者複數,任何一個都以最為緊湊的方式輸出
%o 一個以八進位制表示的數字(基數為8)
%p 以十六進位制(基數為16)表示的一個值的地址,字首為0x,字母使用小寫的a-f表示
%q 使用Go語法以及必須時使用轉義,以雙引號括起來的字串或者位元組切片[]byte,或者是以單引號括起來的數字
%s 字串。輸出字串中的字元直至字串中的空字元(字串以'\0‘結尾,這個'\0'即空字元)
%t 以true或者false輸出的布林值
%T 使用Go語法輸出的值的型別
%U 一個用Unicode表示法表示的整型碼點,預設值為4個數字字元
%v 使用預設格式輸出的內建或者自定義型別的值,或者是使用其型別的String()方式輸出的自定義值,如果該方法存在的話
%x 以十六進位制表示的整型值(基數為十六),數字a-f使用小寫表示
%X 以十六進位制表示的整型值(基數為十六),數字A-F使用小寫表示
%% 一個%字面量
%b 一個二進位制整數值(基數為2),或者是一個(高階的)用科學計數法表示的指數為2的浮點數
%c 字元型。可以把輸入的數字按照ASCII碼相應轉換為對應的字元
%d 一個十進位制數值(基數為10)
%e 以科學記數法e表示的浮點數或者複數值
%E 以科學記數法E表示的浮點數或者複數值
%f 以標準記數法表示的浮點數或者複數值
%g 以%e或者%f表示的浮點數或者複數,任何一個都以最為緊湊的方式輸出
%G 以%E或者%f表示的浮點數或者複數,任何一個都以最為緊湊的方式輸出
%o 一個以八進位制表示的數字(基數為8)
%p 以十六進位制(基數為16)表示的一個值的地址,字首為0x,字母使用小寫的a-f表示
%q 使用Go語法以及必須時使用轉義,以雙引號括起來的字串或者位元組切片[]byte,或者是以單引號括起來的數字
%s 字串。輸出字串中的字元直至字串中的空字元(字串以'\0‘結尾,這個'\0'即空字元)
%t 以true或者false輸出的布林值
%T 使用Go語法輸出的值的型別
%U 一個用Unicode表示法表示的整型碼點,預設值為4個數字字元
%v 使用預設格式輸出的內建或者自定義型別的值,或者是使用其型別的String()方式輸出的自定義值,如果該方法存在的話
%x 以十六進位制表示的整型值(基數為十六),數字a-f使用小寫表示
%X 以十六進位制表示的整型值(基數為十六),數字A-F使用小寫表示
package main

import "fmt"

func main0401() {

    //fmt.Printf("35%%")

    //十進位制整型資料
    a := 123

    //%b 佔位符 列印一個資料的二進位制格式
    fmt.Printf("%b\n", a)
    //%o 佔位符 列印一個資料的二進位制格式
    fmt.Printf("%o\n", a)
    //%x %X 佔位符 十六進位制
    //10-15用a-f表示 %x  a-f  %X A-F
    fmt.Printf("%x\n", a)
    fmt.Printf("%X\n", a)
    //十進位制
    fmt.Println(a)
    fmt.Printf("%d\n", a)

}

func main0402() {
    //十進位制資料
    var a int = 10
    //八進位制資料  八進位制資料是以0開頭  最大值為7
    var b int = 010
    //十六進位制資料  十六進位制資料是以0x開頭
    //10-15用a-f表示 %x  a-f  %X A-F
    var c int = 0xABC

    //二進位制  不能在go語言中直接表示

    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)

}

func main() {
    //''引起來的智慧儲存一個字元
    ch := 'a' //'\n'
    str := "瓜娃子"
    fmt.Printf("%c\n", ch)
    fmt.Printf("%s\n", str)
    fmt.Println(ch)

    //%p 佔位符 列印是一個變數對應的記憶體地址 是以無符號十六進位制整型表示
    fmt.Printf("%p\n", &ch)
    fmt.Printf("%p\n", &str)

    a := false

    //%t佔位符 列印bool型別的值
    fmt.Printf("%t\n",a)
    fmt.Println(a)
}

相關文章