iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
2
Software Development

啥物碗Golang? 30天就Go系列 第 3

變數、常數與命名

基本變數結構

變數的概念來自於數學,是程式語言能表達抽象概念或儲存運算結果的工具。一般我們可以透過變數名來取得變數的值。使用變數之前必須先宣告變數,宣告變數時與javascript一樣使用var

var 變數名稱 變數型別 = 值
// 比方說
var s string = "hello world!"

變數的初始值

如果你之前學過Java,可能會覺得很不習慣,覺得型別與名稱顛倒,我相信過一段時間就會適應了。型別與給值可以擇一省略,例如:

// 省略型別
var s = "Hi"
// 省略給值
var s string

如果省略型別,將會根據值的型別來定義變數的型別(這點跟ruby一樣);如果省略給值,go跟其他語言很不一樣,會自動根據型別初始化!各型別的初始值如下:

型別 初始值
布林值 false
數值 0
字串 空字串
集合與函數 nil

這個機制可以確保每個宣告的變數都有一個合理的初始值,因此在go語言當中不存在未初始化的變數。這個設計大大減少了工程師的麻煩,也可以節省許多時間與程式碼。不愧是較晚發明的程式語言,專門解決工程師的痛點。

宣告多個變數

如果有多個變數想一次宣告,當然也有偷懶的方法:

// 省略給值
var a, b, c int // int, int, int
// 省略型別
var x, y, z = true, 9.2, "haha" // bool, float64, string

簡短變數宣告

一個專案無可避免會宣告大量的變數,如果每次都要varvar去會覺得很煩,所以go有一種簡短版的宣告方法:

i := 100

可以省略型別與var,藉由給值來決定型別。但要特別注意簡短宣告只能用在函示內,不可以做為全域變數的宣告與賦值。這邊有幾點是需要特別注意的:

  1. 這依然是變數宣告,所以如果前面已經宣告過同名的變數,編譯時會報錯。
  2. 如果宣告了一個區域變數但沒有使用(呼叫)到,編譯也會報錯;全域變數可以宣告不使用。
  3. 在宣告變數之前使用變數,當然會錯。
  4. :=是變數宣告,與一般的給值=是不同的,不要混淆。

和基礎宣告一樣,簡短宣告一樣可以同時宣告多個變數,方法如下:

a, b := 1, 2

常數

常數是在程式中我們不希望會改變的值。宣告結構與變數非常相似:

const ip string = "127.0.0.1"

基本上就是最前面由var改為const,型別一樣可以省略,由值決定型別。當然也一樣可以一次宣告多個常數:

const apple, banana = 12, 8
// 或是另一個格式
const (
  Unknow = 0
  Male = 1
  Female = 2
)

命名

Go的合法命名為字母、數字、下底線所組成(大小寫為不同字、首字不可為數字,可以為底線),這個命名規則是包括變數名、常數名、函示名等所有的名稱。

go語言有25個關鍵字,這些關鍵字不可作為命名使用(但可以成為名稱的一部分):

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

此外還有三十多個預先定義的名稱,主要是內建的常數、類型與函示:

  • 内建常量: true false iota nil
  • 内建類別:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
  • 内建函数:
make len cap new append copy close delete
complex real imag panic recover

這些預先定義的名稱不是關鍵字,在適當的時候也可以覆寫它重新給予意義。但建議最好完全知道你自己在做什麼才這麼做,不然可能會產生很多麻煩。

雖然名稱長度上沒有限制,但在命名習慣上,go傾向短小的名稱,這點與java恰好形成強烈的對比。另外go推薦使用駝峰式命名(Camle case)而不是蛇式(snake case),所以符合go風格的名稱會是haveBook而不是have_book

Reference


上一篇
Go環境安裝on Mac
下一篇
基本類別與自訂類別
系列文
啥物碗Golang? 30天就Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
williamyeh
iT邦新手 5 級 ‧ 2018-10-09 22:07:05

文章中出現「类型」簡體字喔!

Bater iT邦新手 4 級 ‧ 2018-10-09 22:39:28 檢舉

感謝提醒

0
Alfred
iT邦新手 5 級 ‧ 2018-10-11 13:25:58

命名名稱開頭大小寫
是否跟以後撰寫從外部引用是否有關係?
const常數也是駝峰式命名嗎?
謝謝

Bater iT邦新手 4 級 ‧ 2018-10-11 18:52:50 檢舉

常數一般來說首字大寫;命名跟外部引用應該沒有關係。

我要留言

立即登入留言