Go語言踩坑系列(一) 基本資料型別

2021-10-04 05:41:56 字數 2160 閱讀 6563

本系列文章並不會停留在go語言的語法層面,更關注語言特性、學習和使用**現的問題以及引起的一些思考。

初始化順序:當前包級別變數 -> 匯入外部包的init() -> 當前包內的init() -> main()。通常可將乙個包匯入但是不使用的方式,初始化某些配置資料。

下面這段**會執行config包和model包下的init()方法:

import

("cmdb-bg/cmd"

_"cmdb-bg/config"

_"cmdb-bg/model"

)

我們都知道,當我們僅僅宣告乙個變數、但未對其進行初始化的時候,go會給每種變數型別賦乙個零值:

func

main()

如果你之前已經使用了":=「對某個變數進行了宣告與初始化,如果你想再次為這個變數進行重新賦值,切記不要加」:"

func

main()

func

main()

}

go中可以用如下方式高效交換兩個變數的值:

func

main()

func

main()

if賦值加判斷復合語句的作用域:f的作用域會被限制在if大括號所包裹的**塊內。在if的外部並不能使用變數f:

funcf1(

)error

fmt.

println

(f)// 編譯不通過: undefined: f

}// 解決:

funcf1(

)error

f.close()

// ok

}

int和int32是不同型別,若要把int當成int32來使用,必須進行強制型別轉換。其他型別同理。

型別斷言的使用(暫作了解):

func

main()

時,可以賦值給他任意型別

var a inte***ce

a =2;

// 型別斷言會返回兩個值

v, ok := a.

(int

)// 如果變數a是斷言的型別,ok為true,v為被斷言變數的值。

// 否則ok為false,v為斷言型別的零值

fmt.

println

(v, ok)

// 2 true

}

如果進行算術運算之後發生了溢位,那麼go會直接丟掉溢位的高位部分。

所有基本型別的值都是可以比較的(整型、浮點型),其他高階型別的比較,一部分需要遵循一定規則,而一部分高階型別是禁止比較的。

不同資料型別不能直接做運算。不像其他語言,go語言沒有隱式型別轉換。要想強制對不同型別做運算,必須進行顯式的強制型別轉換。轉換成同一種型別之後,才能做運算:

func

main()

在進行強制型別轉換時需要注意:當整數值的型別的有效範圍由寬變窄時,會截掉一定數量的高位二進位制數。與這個類似的還有把乙個浮點數型別的值轉換為整數型別值時,浮點數型別的小數部分會被全部截斷:

func

main()

浮點數的精度有限,盡量不要做浮點數運算結果的比較:

func

main()

iota常量讓用二進位制位做標記更簡單了。在第乙個宣告的常量所在的行,iota將會被置為0,然後在每乙個有常量宣告的行加一:

const

( flagup flags =

1<<

iota

// 第一種標記

flagbroadcast // 第二種標記

flagloopback // 第三種標記

flagpointtopoint // 第四種標記

flagmulticast // 第五種標記

)

【go語言踩坑系列(二)】字串

GO語言基本資料型別

任何go語言原始碼檔案都由若干個程式實體組成的。在go語言中,變數 常量 函式 結構體和介面被統稱為 程式實體 而它們的名字被統稱為 識別符號 識別符號可以是任何unicode編碼可以表示的字母字元 數字以及下劃線 不過,首字母不能是數字或下劃線。注意 在go語言中,我們對程式實體的訪問許可權控制只...

Go語言基本資料型別(四)

go語言基本資料型別主要包含 bool,number,string go中的布林型別,只能是 true 和 false,例如 var b bool true 型別描述 uint8 無符號 8位整型 0 到 255 uint16 無符號 16位整型 0 到 65535 uint32 無符號 32位整型...

Go語言基礎之基本資料型別

go語言中有豐富的資料型別,除了基本的整型 浮點型 布林型 字串外,還有陣列 切片 結構體 函式 map 通道 channel 等。go 語言的基本型別和其他語言大同小異。目錄整型分為以下兩個大類 按長度分為 int8 int16 int32 int64 對應的無符號整型 uint8 uint16 ...