//布林型別的關鍵字為bool,值為true或false,不可寫為0或1var v1 bool
v1=true
//接受表示式判斷賦值,不支援自動或強制型別轉換
//1、型別表示//int和int32為不同型別,不會自動型別轉換需要強制型別轉換
//強制型別轉換需注意精度損失(浮點數→整數),值溢位(大範圍→小範圍)
var v2 int32
v1:=64
v2=int32(v1)
//2、數值運算,支援「+,-,*,/和%」
5%3 //求餘
//3、比較運算,「,==,>=,<=,!=」
//不同型別不能進行比較例如int和int8,但可以與字面常量(literal)進行比較
var i int32
var j int64
i,j=1,2
if i==j //編譯錯誤,不同型別不能進行比較
if i==1 || j==2 //編譯通過,可以與字面常量(literal)進行比較
//4、位運算
//go(^x)取反與c語言(~x)不同,其他類似,具體見下表
- 這裡寫描述
//1、浮點型分為float32(類似c中的float),float64(類似c中的double)var f1 float32
f1=12 //不加小數點,被推導為整型
f2:=12.0 //加小數點,被推導為float64
f1=float32(f2) //需要執行強制轉換
//2、浮點數的比較
//浮點數不是精確的表達方式,不能直接使用「==」來判斷是否相等,可以借用math的包math.fdim
//1、複數的表示var v1 complex64
v1=3.2+12i
//v1 v2 v3 表示為同乙個數
v2:=3.2+12i
v3:=complex(3.2,12)
//2、實部與虛部
//z=complex(x,y),通過內建函式實部x=real(z),虛部y=imag(z)
//宣告與賦值- 這裡寫描述
//1、byte,即uint8的別名陣列表示同一型別資料,陣列長度定義後就不可更改,長度是陣列內的乙個內建常量,可通過len()來獲取。//2、rune,即unicode
//1、建立陣列 陣列在定義了長度後無法改變,且作為值型別在傳遞時產生副本,並不能改變陣列元素的值。因此切片的功能彌補了這個不足,切片類似指向陣列的乙個指標。可以抽象為三個變數:指向陣列的指標;切片中元素的個數(len函式);已分配的儲存空間(cap函式)。var array1 [5]int //宣告:var 變數名 型別
var array2 [5]int=[5]int //初始化
array3:=[5]int //直接用「:=」賦值
[3][5]int //二維陣列
[3]*float //指標陣列
//2、元素訪問
for i,v:=range array
//3、值型別
//陣列在go中作為乙個值型別,值型別在賦值和函式引數傳遞時,只複製副本,因此在函式體中並不能改變陣列的內容,需用指標來改變陣列的值。
//1、建立切片map是一堆鍵值對的未排序集合。//a)基於陣列建立
var myarray [5]int=[5]
var myslice int=myarray[first:last]
slice1=myarray[:] //基於陣列所有元素建立
slice2=myarray[:3] //基於前三個元素建立
slice3=myarray[3:] //基於第3個元素開始後的所有元素建立
//b)直接建立
slice1:=make(int,5) //元素初始值為0,初始個數為5
slice2:=make(int,5,10) //元素初始值為0,初始個數為5,預留個數為10
slice3:=int //初始化賦值
//c)基於切片建立
oldslice:=int
newslice:=oldslice[:3] //基於切片建立,不能超過原切片的儲存空間(cap函式的值)
//2、元素遍歷
for i,v:=range slice
//3、動態增減元素
//切片分儲存空間(cap)和元素個數(len),當儲存空間小於實際的元素個數,會重新分配一塊原空間2倍的記憶體塊,並將原資料複製到該記憶體塊中,合理的分配儲存空間可以以空間換時間,降低系統開銷。
//新增元素
//4、內容複製
//copy()函式可以複製切片,如果切片大小不一樣,按較小的切片元素個數進行複製
slice1:=int
slice2:=int
copy(slice2,slice1) //只會複製slice1的前三個元素到slice2中
copy(slice1,slice1) //只會複製slice2的三個元素到slice1中的前三個位置
//1、先宣告後建立再賦值map可以用來判斷乙個值是否在切片或陣列中。var map1 map[鍵型別] 值型別
//建立
map1=make(map[鍵型別] 值型別)
map1=make(map[鍵型別] 值型別 儲存空間)
//賦值
map1[key]=value
// 直接建立
m2 := make(map[string]string)
// 然後賦值
m2["a"] = "aa"
m2["b"] = "bb"
// 初始化 + 賦值一體化
m3 := map[string]string
//2、元素刪除
//delete()函式刪除對應key的鍵值對,如果key不存在,不會報錯;如果value為nil,則會丟擲異常(panic)。
delete(map1,key)
//3、元素查詢
value,ok:=mymap[key]
if ok
//遍歷
for key,value:=range mymap
// 判斷某個型別(假如為mytype)的值是否在切片或陣列(假如為mylist)中// 構造乙個map,key的型別為mytype,value為bool型
mymap := make(map[mytype]bool)
mylist := mytype
// 將切片中的值存為map中的key(因為key不能重複),map的value都為true
for _, value := range mylist
// 判斷valuex是否在mylist中,即判斷其是否在mymap的key中
if _, ok := mymap[valuex]; ok
package mainimport "fmt"
func main()
delete(m3, "a")
fmt.println(m2, m3)
value, ok := m2["a"]
if ok
}
package main具體參考go語言指標詳解import "fmt"
type mytype int
func main()
// 將切片中的值存為map中的key(因為key不能重複),map的value都為true
for _, value := range mylist
// 判斷valuex是否在mylist中,即判斷其是否在mymap的key中
if _, ok := mymap[1]; ok
}
具體參考go物件導向程式設計之結構體
具體參考go物件導向程式設計之介面
具體參考go併發程式設計之channel
golang 學習筆記 型別
int和uint的實際寬度會根據計算架構不同而不同,386下4個位元組,amd64下8個位元組 byte可看做uint8的別名型別 rune可看做int32的別名型別,專用於儲存unicode編碼的單個字元。5種方式來表示乙個rune字面量 rune字面量表示轉義符 原生字串字面量 由反引號包裹 所...
Golang學習筆記 高階型別
高階型別 陣列 切片map 函式 介面 inte ce 結構體參考文件 長度不可變。int不用指定長度,為3。內部結構三個元素 指向底層陣列某個元素的指標 切片的長度 切片的容量。容量cap 從指標指向的元素到底層最後乙個元素的元素個數。雜湊表,關聯陣列。零值為nil,長度為0,不可以進行取值等操作...
Golang學習筆記 四 資料型別
go語言內建了豐富的資料型別,主要分為四類,基礎資料型別 復合資料型別,引用資料型別及介面資料型別,另外,在這些型別的基礎,也支援我們根據自己的資料型別,這就為我們編寫 提供很大的便利性。這一節,我們先學一下基礎資料型別中的整數型別。整數型別分兩種,有符號 int8,int16,int32,int6...