作業:
既然匯入多個包時可以進行簡寫,那麼宣告多個常量、全域性變數或一般型別(非介面、非結構)是否也可以用同樣的方法呢?
答案:
是可以的!驗證如下
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位元組
- 取值範圍:true、false
- 注意事項:不可用數字代表true或false
二、整型:int/uint
- 根據執行平臺可能是32位或64位
三、8位整型:int8/unit8
- 長度:1位元組
- 取值範圍: -128 ~ 127 / 0 ~ 255
四、位元組型:byte(unit8別名)
- 16位整型:int16/uint16
- 長度:2位元組
- 32位整型:int32(rune)/uint32
- 長度:4位元組
- 取值範圍:-2^32/2
2^32/2-1/02^32-1
- 64位整型:int64/uint64
- 長度:8位元組
- 取值範圍:-2^64/2
2^64/2-1/02^64-1
- 浮點型:float32/float64
- 長度:4/8位元組
- 小數位:精確到7/15小數位
- 取值範圍:-32768
32767/065535
- 複數:complex64/complex128
- 長度:8/16位元組
- 足夠儲存指標的 32 位或 64 位整數型:uintptr
- 其它值型別:
- array、struct、string
- 引用型別:
- slice、map、chan
- 介面型別:inteface
- 函式型別: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)
}
單個變數的宣告和賦值
- 變數的宣告格式:
var a int
- 變數的賦值格式:
a = 123
或者var a int = 123
- 宣告的同時賦值:
a [int] := 123
func main() {
//var b 文字
//b = "中文型別名"
var a float32
a = 1.1
fmt.Println(a)
fmt.Println(math.MaxUint8)
}
//小數的長度問題
全域性變數不支援 :=
宣告
多個變數的宣告與賦值
- 全域性變數的宣告可使用 var() 的方式進行簡寫
- 全域性變數的宣告不可以省略 var,但可使用並行方式
- 所有變數都可以使用型別推斷
- 區域性變數不可以使用 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 協議》,轉載必須註明作者和本文連結