1、資料型別
go語言支持的基礎型別:
整型:int,int8,int16,int32,int64
無符號整型:uint,uint8,uint16,uint32,uint64
其中默認型別為int,int表示32位或64位與作業系統有關
位元組:byte
布爾:bool
浮點型:float32,float64,默認型別為float64
復數:complex64(32位實部和虛部),complex128(63位實部和虛部),默認型別為complex128
指標:uintptr,本質為無符整型uint8
字串:string
字符:rune,本質為int32,可表示unicode編碼
錯誤型別:error,本質為介面
go支持的復合型別:
指標*,陣列,結構體struct
切片slice,字典map,通道channel,介面interface
基礎型別的默認值:
| 資料型別 | 默認值 |
| 整型 | 0 |
| 浮點型 | 0 |
| 布林值 | false |
| 字串 | "" |
值型別和參考型別:
值型別和參考型別的區別在于,在賦值或作為函式引數呼叫時,值型別會復制一份新的拷貝,新資料的修改不會影響原資料,而參考型別只會復制變數的參考,參考資料的修改會影響原資料
值型別:基礎資料型別,指標,陣列,結構體
參考型別:切片,map,channel,interface
陣列和切片的定義:
// 陣列定義
a :=[5]int{1,2,3,4,5}
a := [...]int{1,2,3,4,5}
// 切片定義
a :=[]int{1,2,3,4,5}
a := a[1:3]
切片底層實際是一個三元組:指標、len、cap
使用make創建切片
make是Go語言的內置函式
mySlice1 := make([]int, 5) //元素個數為5 ,初始值為0
mySlice2 := make([]int, 5, 10) //len為5,cap為10
mySlice3 := []int{1, 2, 3, 4, 5} //len為5,cap為5
mySlice4 := mySlice3 [1:3] // len為2,cap為4,容量為1到最后
切片的容量增長:
函式append會智能地處理底層陣列的容量增長,在切片容量小于1000個元素時, 總是會成倍地增加容量,一旦元素個數超過1000,時,容量的增長因子會設為1.25,也就是每次增加25%的容量
各個型別所占的記憶體(64位環境):
指標型別:8個位元組
string型別:16個位元組,包含一個指標,指向真實地址,和一個int型別表示長度
陣列型別:總位元組數為單個元素占用大小乘以個數
切片型別:包含一個指向陣列的指標,一個int型別表示長度,一個cap型別表示容量,總共24位元組
map型別:8個位元組,本身為一個指標,指向map自己
struct型別:大小為所有成員大小的總和
interface{}:占用記憶體為16位元組,包含兩個指標
map定義:
map的鍵可以使任何值,包括內置型別或結構體,只要可以用==進行比較,但不能是切片、函式以及包含切片的資料結構由于具有參考語意不能作為映射的鍵
var colors map[string]string colors["red"] = "#da1337" // panic: assignment to entry in nil map
宣告和初始化:
colors := make(map[string]string)
colors := map[string]string{}
取值:color, ok := colors["red"]
遍歷:for k, v := range colors
nil切片和空切片
創建nil切片:var slice []int

創建空切片:
slice := make([]int, 0)
slice := []int{}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/6561.html
標籤:Go
上一篇:go http庫 設定代理
