Go 基礎教程--3-型別與變數

CR發表於2019-09-16

作業:

既然匯入多個包時可以進行簡寫,那麼宣告多個常量、全域性變數或一般型別(非介面、非結構)是否也可以用同樣的方法呢?

答案:

是可以的!驗證如下

package main
import std "fmt"

const (
    PI = 3.14
    const1 = "1"
    const2 = 2
    const3 = 3
)

var (
    name = "gopher"
    name1 = "1"
    name2 = 2
    name3 = 3
)

type (
    newType int
    type1 float32
    type2 string
    type3 byte
)


func main() {
    std.Println("hello1")
}

Go基本型別

一、布林型:bool

  1. 長度:1位元組
  2. 取值範圍:true、false
  3. 注意事項:不可用數字代表true或false

二、整型:int/uint

  1. 根據執行平臺可能是32位或64位

三、8位整型:int8/unit8

  1. 長度:1位元組
  2. 取值範圍: -128 ~ 127 / 0 ~ 255

四、位元組型:byte(unit8別名)

  1. 16位整型:int16/uint16
    • 長度:2位元組
  2. 32位整型:int32(rune)/uint32
    • 長度:4位元組
    • 取值範圍:-2^32/22^32/2-1/02^32-1
  3. 64位整型:int64/uint64
    • 長度:8位元組
    • 取值範圍:-2^64/22^64/2-1/02^64-1
  4. 浮點型:float32/float64
    • 長度:4/8位元組
    • 小數位:精確到7/15小數位
    • 取值範圍:-3276832767/065535
  5. 複數:complex64/complex128
    • 長度:8/16位元組
  6. 足夠儲存指標的 32 位或 64 位整數型:uintptr
  7. 其它值型別:
    • array、struct、string
  8. 引用型別:
    • slice、map、chan
  9. 介面型別:inteface
  10. 函式型別:func

型別零值

零值並不等於空值,而是當變數被宣告為某種型別後的預設值,
通常情況下值型別的預設值為0,bool為false,string為空字串

package main

import "fmt"

func main() {
    var a bool
    fmt.Println(a)
}
//int 0  
//bool false 
//string ''
//byte 0

判斷長度是否夠用

package main

import (
    "fmt"
    "math"
)

func main() {
    //var a byte
    fmt.Println(math.MaxInt8) //127
    fmt.Println(math.MaxInt32) //2147483647

}

型別別名

中文也可以做別名,不建議

package main

import (
    "fmt"
)
//別名
type (
    byte uint8
    rune int32
    文字 string
)
func main() {
    var b  文字
    b = "中文型別名"
    fmt.Println(b)

}

單個變數的宣告和賦值

  1. 變數的宣告格式:var a int
  2. 變數的賦值格式:a = 123 或者 var a int = 123
  3. 宣告的同時賦值:a [int] := 123
func main() {
    //var b  文字
    //b = "中文型別名"
    var a float32
    a = 1.1
    fmt.Println(a)
    fmt.Println(math.MaxUint8)

}
//小數的長度問題

全域性變數不支援 :=宣告

多個變數的宣告與賦值

  1. 全域性變數的宣告可使用 var() 的方式進行簡寫
  2. 全域性變數的宣告不可以省略 var,但可使用並行方式
  3. 所有變數都可以使用型別推斷
  4. 區域性變數不可以使用 var() 的方式簡寫,只能使用並行方式
func main() {
    var a, b, c, d int = 1, 2, 3, 4
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
}

空白值忽略

func main() {
    var a, _, c, d int = 1, 2, 3, 4
    fmt.Println(a)
    //fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
}
//用於多個返回值

變數的型別轉換

Go中不存在隱式轉換,所有型別轉換必須顯式宣告
轉換隻能發生在兩種相互相容的型別之間
型別轉換的格式:
[:]= ()

func main() {
    var a float32 = 100.1
    fmt.Println(a)
    b := bool(a)
    fmt.Println(b)
}
//cannot convert a (type float32) to type bool

作業

func main() {
var a int = 65
b := string(a)
fmt.Println(b)
}
//A

答案分析:

string()表示將資料轉換成文字格式,因為計算機儲存的任何東西本質上都是數字,因此此函式自然地認為我們需要的是用數字65表示的文字A

強制型別轉換

package main

import (
    "fmt"
    "strconv"
)
func main(){
    var a int  = 65
    b := strconv.Itoa(a)
    fmt.Println(b)
}
//65
package main
import (
    "fmt"
    "strconv"
)
func main(){
    var a int  = 65
    b := strconv.Itoa(a)
    a,_ = strconv.Atoi(b)

    fmt.Println(a)
    fmt.Println(b)
}
//65
//65
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章