變數與常數

變數

使用 var 關鍵字是Go最基本的變數宣告方式:

//將型別放在變數名稱後方 var name string var age int var enable bool

在變數名稱後加上變數型別,若無賦值(初始化)則變數會被初始化成其型別的預設值。

整型和浮點型變數的預設值為 0
字串變數的預設值為空字串 ""
布林型變數預設為 false
切片、函式、指標變數的預設為 nil

要注意的是變數名稱、型別…等都是 有區分大小寫 的。

//型態區分大小寫 var name String //Wrong var name string var age Int //wrong var age int //變數名稱區分大小寫 var Computer = "大寫C" var computer = "小寫c" fmt.Println(Computer,computer) //大寫C 小寫c

變數命名及使用規則

1.變數名稱首字符不能為數字,可以是字母或者下划線(_):

_myName
_temp
iPad
applePencil
a_123
2021 // wrong
4abc // wrong

2.Go語言中關鍵字和保留字都不能作變數名,也不能帶有運算符(+,-,*,/…)

關鍵字即是被Go語言賦予特殊涵義的單字,也可稱為保留字。Go語言中的關鍵字共有25個:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

3.Go 語言中的變數需要宣告後才能使用,並且宣告後必須使用

初始化

指定資料型別

var name string = "小明" var age int = 18

注意:字串必須使用“雙引號”,‘單引號’ 會報錯

根據值判斷型別

Go 還可以根據你賦予的初值來判斷該變數為何種型別,因此也能這麼寫:

var name,address,email = "小明","台北市","a123@gmail.com" fmt.Println(name) //印出變數值 小明 fmt.Println(name,address,email) //多個變數印出 小明 台北市 a123@gmail.com

使用 :=

使用 := 省略掉 var 並初始化變數,要注意的是 := 左側必須為新定義的變數

name, address, email := "小明", "台北市", "a123@gmail.com" fmt.Println(name,address,email) //小明 台北市 a123@gmail.com

像是下方這個例子會引發編譯錯誤:

var age int age := 21 //編譯錯誤 age已經定義不需重新定義

只能在函數體內使用 := 宣告變數,不可用於全局變數的宣告與賦值。

常數

常數為在程式編譯階段就確定下來的值,而程式在執行時無法改變該值。

常數可定義為數值、布林值或字串等型別。

const Pi = 3.1415926 const Size = 50 const prefix = "Pluto_" Size = 20 // 當你試著去修改常數的值,會引發 cannot assign to Size 錯誤

iota

自增長常數,在const{}添加一個關鍵字 iota ,每行的iota都會累加1,第一行iota默認為0

const( Taipei = iota Taoyuan Taichung Kaohsiung Tainan ) fmt.Println(Taipei) //0 fmt.Println(Taoyuan) //1 fmt.Println(Taichung) //2 fmt.Println(Kaohsiung) //3 fmt.Println(Tainan) //4

iota可以定義數量級(ex: KB,MB,GB,TB…等類似的單位也可以用此來定義)

const( Taipei = iota*10 Taoyuan Taichung Kaohsiung Tainan ) fmt.Println(Taipei) //0 fmt.Println(Taoyuan) //10 fmt.Println(Taichung) //20 fmt.Println(Kaohsiung) //30 fmt.Println(Tainan) //40

複雜一點的話

const( a,b = iota+1,iota+2 // iota = 0 , a = 0+1 = 1 , b = 0+2 = 2 c,d // iota = 1 , c = 1+1 = 2 , d = 1+2 = 3 e,f // iota = 2 , e = 2+1 = 3 , f = 2+2 = 4 g,h = iota*2,iota*3 //iota = 3 , g = 3*2 = 6 , h = 3*3 = 9 i,j //iota = 4 , i = 4*2 = 8 , j = 4*3 = 12 ) fmt.Println("a = %d , b = %d",a,b) // a = 1 , b = 2 fmt.Println("c = %d , d = %d",c,d) // c = 2 , d = 3 fmt.Println("e = %d , f = %d",e,f) // e = 3 , f = 4 fmt.Println("g = %d , h = %d",g,h) // g = 6 , h = 9 fmt.Println("i = %d , j = %d",i,j) // i = 8 , j = 12

分組宣告

同時宣告多個變數、常數或匯入多個套件時都可以採用分組的方式進行宣告。

匯入多組套件

import "fmt" import "os"

可寫為:

import( "fmt" "os" )

宣告多個常數

const Pi = 3.1415926 const Size = 50 const prefix = "Pluto_"

可寫為:

const( Pi = 3.1415926 Size = 50 prefix = "Pluto_" )

宣告多個變數

var i int var pi float32 var enable bool

可寫為

var( i int pi float32 enable bool )