初始化變數
多個變數賦值
匿名變數
常量型別別名與型別定義
參考資料
標準格式
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檔案時,會自動將其之前的進行覆蓋 第一種...