Go語言學習筆記 變數

2021-10-06 03:18:15 字數 3946 閱讀 6849

初始化變數

多個變數賦值

匿名變數

常量型別別名與型別定義

參考資料

標準格式

var 變數名 變數型別

//整型變數

var a int

//64位浮點陣列變數

var b [

]float64

//引數為空,返回值是bool的函式變數

var c func()

bool

//結構體變數

var e struct

一次宣告多個變數
//宣告同種變數

var a,b,c int

//宣告不同種變數

var(

x float64

y string

z bool

)

預設值

如果使用前面的形式宣告變數,那麼新宣告的變數的值為預設值

var s string

//""

var i int

//0var f float64

//0var b bool

//false

//切片、函式、指標等的預設值為nil

宣告時初始化

標準格式

var 變數名 型別 = 表示式

var a int=5

var b float64

=3.14

var c string

="hello"

省略型別

既然給了變數初始值,那麼變數的型別也肯定與初始值相同,可以省略型別,交給編譯器去根據表示式推斷

var 變數名 = 表示式

var a =

5var b =

3.14

var c =

"hello"

如果表示式是浮點數常量,編譯器會推斷為float64型別,提高精度

var b =

3.14

fmt.

println

(reflect.

typeof

(b))

//float64

如果表示式內帶有型別資訊,編譯器還是會根據表示式的型別進行推斷

var b =

float32

(3.14

)fmt.

println

(reflect.

typeof

(b))

//float32

短變數宣告

在函式體內,還可以省略var寫出更精簡的變數宣告形式

a :=

2//等價於 var a int = 2

b :=

3.14

//等價於 var b float64 = 3.14

對於函式的返回值,這種形式非常方便

conn, err := net.

dial

("tcp"

,"127.0.0.1:8080"

)//等價於

var conn net.conn

var err error

conn, err = net.

dial

("tcp"

,"127.0.0.1:8080"

)

使用逗號隔開,可以一次對多個變數賦值

a, b, c :=1,

2,3a, b, c =3,

2,1a, b, c = c, a, b

在go中,宣告而未使用的變數會導致編譯報錯。如果需要接受函式的返回值,但又不會繼續使用,可以使用匿名變數,即_

a :=

intfor

_, v :=

range a

這裡迴圈內不需要a的索引,所以使用匿名變數,編譯也能通過

常量在編譯期計算確定,執行期間不能改變

常量宣告

將宣告變數時的var改為const

const pi float64

=3.1415926

const e =

2.71828

const

( a =

5 b =

"hello"

)

因為常量在編譯期確定,所以可以用於陣列宣告,使用變數會報錯

const

len=

5var arr [

len]

int

列舉

go中暫時沒有列舉,可以使用常量配合iota模擬列舉

type weekday int

const

( mon weekday =

iota+1

tuewed

thufri

)var d weekday = wed

fmt.

println

(d)

也可以利用iota的遞增性質去構造其他列舉,如奇數、偶數、數字

weekday繫結方法後利用switch case語句可以列舉更多資訊

type weekday int

const

( mon weekday =

iota+1

tuewed

thufri

)func

(day weekday)

string()

string

return

"error"

}

寫法:type =

為乙個型別取乙個新的名字,編譯時仍作為原型別處理

type weekday =

intfunc

fun(day weekday)

int

編譯沒有問題,weekday被當作int處理

寫法:type

定義乙個新的型別,與原型別分開處理,兩種型別的變數不能混用

type weekday int

func

fun(day weekday)

int

編譯會報錯,因為返回值day的型別是weekday,與函式定義的int不符

為非本地型別定義方法

type dur = time.duration

func

(d dur)

fun(

)//編譯出錯

time.duration是包外定義的型別,在自己的包中不能為它定義方法,使用型別別名會編譯報錯

此時可以利用型別定義,指定新的型別定義方法,但是新的型別不能使用原型別的方法

type dur time.duration

func

(d dur)

fun(

)//編譯通過

在結構體中使用別名

在go中宣告結構體如果型別不同可以不用變數名,但是相同的型別名會產生歧義,可以使用別名替代

type a struct

//替換為

type fakeint =

inttype b struct

《go語言從入門到實踐》第二章

Go語言學習筆記 變數

變數 使用關鍵字var定義變數,格式為 var 變數名 資料型別 值 對於未初始化的變數,編譯器會自動初始化。go語言支援推斷賦值,即如果給變數提供初始化值,可以省略變數型別。由編譯器自行推斷 go語言支援組賦值 var name string wangyijie 組宣告,賦值 var name w...

go語言學習筆記 4 變數

宣告 var變數名 型別 1 變數宣告關鍵字 2 變數宣告不用分號做結束符 3 多個變數的宣告 1 不同型別 var i int str string 2 同一型別,只要在最後加上型別即可 var v1,v2,v3 int 初始化 宣告的同時進行初始化 var可有可無,型別可有可無 有型別名 必須有...

Go語言學習(一)Go語言變數

總結 此 中需要注意的點是 1 宣告變數時要注意中間的空格不能省略 2 如果 寫的不規範,編譯時會自動調整成規範的格式,比如在編譯前 中的1,2之間沒有空格,但是在編譯後會自動出現 3 在編寫 時,不用每次都刪除hello.exe檔案,因為在編譯main.go檔案時,會自動將其之前的進行覆蓋 第一種...