xia的小窩

一起來coding和碼字吧

0%

Golang-變數宣告

變數可以用來暫存資料,如果需要儲存一個變數需要滿足4個條件 :

  1. 宣告變數的敘述
  2. 變數名稱
  3. 變數要儲存的資料型別
  4. 變數的初始值

var 宣告變數

1
2
3
4
5
6
var <變數名稱> <變數型別> = <值>
/*
example todo that

var fast string = "web"
*/

這邊我們用 var 宣告一個變數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
)

var test string = "test"

func main() {
var fast string = "web"
fmt.Println("First test : ", fast)
fmt.Println("Second test : ", test, fast)
}
// web
// test web

這邊我們先不討論 變數的作用範圍 ,我們先知道如果有宣告和後續並未使用就會出現 <decleared bot not used> 的錯誤就行。這是為了卻確保開發者不要一堆沒有用的變數,徒浪費記憶體空間。

一次宣告多個變數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 小括號
var (
<name1> <category1> = <value1>
<name2> <category2> = <value2>
)

// example
//package main

//import (
// "fmt"
// "time"
//)

//var (
// Debug bool = true
// log string = "fool"
// startb time.Time = time.Now()
//)

//func main() {
// fmt.Println(Debug, log, startb)
//}

// to be the end
// true fool 2022-01-21 19:03:21.0640867 +0800 CST m=+0.001015401

這樣看起來就少打了一些字~~

省略型別或賦值

1
2
3
4
5
var (
Debug bool // 省略初始值
log = "fool" // 省略型別
startb = time.Now() // 省略型別
)

如果宣告值沒有給予該初始值,GO語言會自動為變數賦予型別特有的零值 ( zero value )

型別出現問題時……

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"math/rand"
)

func main() {
var seed = 123456789
rand.Seed(seed)
}

// .\hello.go:9:11: cannot use seed (type int) as type int64 in argument to rand.Seed

這邊我們看到了錯誤訊息,問題在於該必要的參數型別為int64

go 語言對於一個整數都會將其定義成int,這個時候我們只要補上int64即可

1
var seed int64 = 123456789

短變數宣告

1
<name> := <value>

這個寫法是最常見的變數定義方式,我們自己試一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"time"
)

func main() {
de := false
test := "test"
st := time.Now()
fmt.Println(de, test, st)
}
// false test 2022-01-21 19:26:27.2728104 +0800 CST m=+0.001527301

這邊我們一次就來宣告一個多重變數

1
2
3
4
5
// 略
func main() {
de , test, st := false, "test", time.Now();
fmt.Println(de, test, st)
}

最後我們來利用函式解決該問題

1
2
3
4
5
6
7
8
9
// 略
func getvalue()(bool, string, time.Time){
return false, "test", time.Now
}

func main() {
de , test, st := getvalue();
fmt.Println(de, test, st)
}

其實在這邊又可回到 var 了

1
2
3
4
5
6
7
8
9
10
11
// 略

func main() {
var (
de bool
test string
st time.Time
)
de , test, st := getvalue();
fmt.Println(de, test, st)
}

使用 var 宣告多個變數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// var <n1>, <n2>, ...<category>
// var <n1>, <n2>, ... = <value>

func getvalue() (bool, string, time.Time) {
return false, "test", time.Now()
}

func main() {
var s, m, n int64
fmt.Println(s, m, n)

var a, b, c = "one", 2, 3
fmt.Println(a, b, c)

var De, test, st = getvalue()
fmt.Println(De, test, st)
}

很奇特的一點是能夠用其他語言來做變數命名

1
2
3
4
func main() {
國中 := "test"
fmt.Println(國中)
}