golang學習筆記 型別

2022-04-11 07:21:44 字數 4418 閱讀 2251

//布林型別的關鍵字為bool,值為true或false,不可寫為0或1

var 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的別名

//2、rune,即unicode

陣列表示同一型別資料,陣列長度定義後就不可更改,長度是陣列內的乙個內建常量,可通過len()來獲取。

//1、建立陣列

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中作為乙個值型別,值型別在賦值和函式引數傳遞時,只複製副本,因此在函式體中並不能改變陣列的內容,需用指標來改變陣列的值。

​ 陣列在定義了長度後無法改變,且作為值型別在傳遞時產生副本,並不能改變陣列元素的值。因此切片的功能彌補了這個不足,切片類似指向陣列的乙個指標。可以抽象為三個變數:指向陣列的指標;切片中元素的個數(len函式);已分配的儲存空間(cap函式)。

//1、建立切片

//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中的前三個位置

map是一堆鍵值對的未排序集合。

//1、先宣告後建立再賦值

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

map可以用來判斷乙個值是否在切片或陣列中。

// 判斷某個型別(假如為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 main

import "fmt"

func main()

delete(m3, "a")

fmt.println(m2, m3)

value, ok := m2["a"]

if ok

}

package main

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物件導向程式設計之介面

具體參考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...