Go 01 常量與變數使用注意事項

2021-10-24 23:14:05 字數 2918 閱讀 9558

go是靜態型別,不能在執行期改變變數的型別。

面試題

關於全域性變數的初始化,下面正確的使用方式是

a、var i int = 10

b、var i = 10

c、i := 10

這是乙個關於go語言全域性變數宣告和賦值的考察,go語言中的變數宣告使用關鍵字var,例如:

var str string    //宣告變數

str = "test" //給變數賦值

這邊var是定義變數的關鍵字,str是變數名稱,string是變數型別,=是賦值符號,"test"是值。上面的程式分兩步,第一步宣告變數,第二步給變數賦值。也可以將兩步合到一起。

var str string = "test"
使用關鍵字 var 定義變數,自動初始化為零值。如果提供初始化值,可省略變數型別,由編譯器自動推斷:

var str = "test"
go語言還提供了一種更簡短的寫法:

str := "test"
相當於先執行了var str string定義了str變數,再執行str = "test"的賦值操作。

go語言全域性變數不支援在函式外進行賦值,如:

var str string  //定義了乙個全域性變數str

str = "test" //全域性變數不支援這種操作

因此,全域性變數不支援 str := "test"操作,此方法只支援區域性變數操作。

func main()
可一次定義多個變數:

var x, y, z int

var s, n = "abc", 123

var (

a int

b float32

)func main()

多變數賦值時,先計算所有相關值,然後再從左到右依次賦值。

data, i := [3]int, 0

i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)

全域性變數還支援若某個變數需要依賴其它變數,則被依賴的變數先初始化

var test1 = test2

var test2 = "test2"

常量值必須是編譯期可確定的數字、字串、布林值。

const x, y int = 1, 2 // 多常量初始化

const s = "hello, world!" // 型別推斷

const ( // 常量組

a, b = 10, 100

c bool = false

)

go語言中當定義乙個區域性變數未使用會編譯錯誤,但是區域性常量未使用不會引發編譯錯誤。

在常量組中,如不提供型別和初始化值,那麼視作與上一常量值相同。

const (

s = "abc"

x // x = "abc"

)

常量值還可以是 len、cap、unsafe.sizeof 等編譯期可確定結果的函式返回值。

const (

a = "abc"

b = len(a)

c = unsafe.sizeof(b)

)

如果常量型別足以儲存初始化值,那麼不會引發溢位錯誤。

const (

a byte = 100 // int to byte

b int = 1e20 // float64 to int, overflows

)

面試題:

對於常量定義zero(const zero = 0.0),zero是浮點型常量,這一說話時候正確。(false)

go語言常量有個不同尋常的地方,雖然乙個常量可以有任意乙個確定的型別,例如int或float64,但是很多常量卻並沒有乙個明確的基礎型別,編譯器為這些沒有明確的基礎型別的數字變數提供了比基礎型別更高的算術運算。有六種未明確型別的變數型別,分別是無型別的布林型,無型別的整數,無型別的字元,無型別的浮點數,無型別的複數,無型別的字串。

關鍵字 iota 定義常量組中從 0 開始按行計數的自增列舉值。

const (

sunday = iota // 0

monday // 1,通常省略後續⾏行表示式。

tuesday // 2

wednesday // 3

thursday // 4

friday // 5

saturday // 6

)

const (

_ = iota // iota = 0

kb int64 = 1 << (10 * iota) // iota = 1

mb // 與 kb 表示式相同,但 iota = 2

gbtb

)mb,gb,tb會表示式與kb相同,都為1<<(10 * _),但是iota會自增

同樣的道理:

const (

i =1如果 iota ⾃自增被打斷,須顯式恢復。

const (

a = iota // 0

b // 1

c = "c" // c

d // c,與上⼀一⾏行相同。

e = iota // 4,顯式恢復。注意計數包含了 c、d 兩⾏行。

f // 5

)需要注意的是e=4,顯式恢復。

變數使用注意事項

變數表示記憶體中的乙個儲存區域 該區域有自己的名稱 變數名 和型別 資料型別 golang變數使用的三種方式 1 第一種,指定變數型別,宣告後若不賦值,使用預設值 2 第二種,根據值自行判定定量型別 型別推導 3 省略var,注意 左側的變數不應該是已經表明過的,否則會導致編譯錯誤 4 多變數生命 ...

c 常量(const) 使用的注意事項

在我們編碼的過程 const 是我們經常用到的一種宣告型別,如果不了解const的執行機制,有時候會發生一些莫名其妙的bug,可能讓我們掉入深坑中。接下來我們一起看看常量的應用吧!1.常量預設是靜態型別,所以不能和static一起使用 2.常量是在編譯時計算的,它的表示式中不能包含變數 如 cons...

c 常量(const) 使用的注意事項

在我們編碼的過程 const 是我們經常用到的一種宣告型別,如果不了解const的執行機制,有時候會發生一些莫名其妙的bug,可能讓我們掉入深坑中。接下來我們一起看看常量的應用吧!1.常量預設是靜態型別,所以不能和static一起使用 2.常量是在編譯時計算的,它的表示式中不能包含變數 如 cons...