iT邦幫忙

2021 iThome 鐵人賽

DAY 2
1
Modern Web

還喝不 go系列 第 2

[13th][Day2] 變數

about variable

不管在哪一個程式語言中,我們都需要變數,有了基本的變數,才可以進行數值、字串...等操作

變數就像黏土,開發者把黏土捏成它應該要有的樣子,可以讓黏土跟黏土合在一起變成更大團的黏土

可以讓黏土執行影分身之術,做不同的用途

善用黏土 … 阿不對 … 善用變數,可以讓開發變得更順暢

數字 (Number) 相關的型別
數字型態 (numeric types) 用來表示數字。在 Go 語言中有以下數字型態:

我常用到的數字型態

int
int64
float64

就只有這三種

others :

無號整數

uint8
uint16
uint32
uint64
uint (32 或 64 位元)
帶號整數

int8
int16
int32
int64
int (32 或 64 位元)
浮點數

float32
float64
hint:go 只有 float32 float64 沒有 float
複數

complex64
complex128

在計算精密小數的時候 建議使用 "github.com/shopspring/decimal" 可以解決很多 float64 在計算時會遇到的詭異情形以及該死的進位問題


about string

golang 有三種字串型態:
string
byte
rune
在預設情形下,應該優先使用 string 型別,除非有明確的理由,才會使用另外兩種型別。

string 是以 UTF-8 編碼來處理的字串,string 的值視為『單值』而『非字元陣列』。byte 則保持字串原始的內容,不處理編碼。
rune 則是將字串以 Unicode code point 切開時所用的型別。(這個小弟還沒用過QQ)

若要使用 json.Marshall 或是其他的 json 方法的話 ,[]byte 型態可以幫我很大的忙


about bool

計算機概論裡面我記得最深刻的一句話 .... 電腦就是 1 跟 0 的世界

golang 的布林型態只有兩個值:
true (表示真)
false (表示偽)

不像有些語言中還有 null(未知)

bool 最常應用到的地方就是 if , 或是有些 DB 的欄位也會用 bool 來作儲存


about Parameter Declarations

golang 有多個宣告變數的方式,使用 var 是最基本的方式。例如,宣告一個 x 變數,型態為 int,初始值為 10

var x int = 10

這麼一來,從 x 這個位置開始,儲存了 int 長度的值 10
在宣告時,型態寫在名稱之後。你也可以『同時』建立多個變數

var q, w, e, r int = 94, 87, 94, 53

var (
    x int = 10
    y string = "Eric"
    z bool = true
)

短變數宣告
在函式中,想要定義變數值的場合,可以使用語法糖 (Syntactic Sugar)的宣告方式

x := 10
y := 94.87 //注意 浮點數預設為 float64
z := "Eric"

如果 x 是首次定義,就等於是宣告變數並指定值。上例也可以寫成一行:

x, y, z := 10, 94.87, "Eric"

短宣告的左邊必須有至少一個尚未宣告過的變數
短宣告常用於多值回傳的 function return

同一個變數只能宣告一次,如果這樣寫就會發生錯誤

x := 10
x := 56 //  no new variables on left side of :=

宣告變數有三個要件

識別字 (identifier)
該變數的資料型別 (data type)
該變數的值 (value)
在變數命名時,通常會採用下列三種風格之一:

PascalCase、camelCase、snake_case
在 Go 語言中,使用 PascalCase(大寫頭駝峰式) 和 camelCase(小寫頭駝峰式) 是不一樣的。當識別字使用 PascalCase 時,表示該識別字是公開的 (public)。反之,當使用 camelCase 時,表示該識別字是私有的 (private) 只能在該 package 下使用。

golang 在變數命名上較少使用 snake_case(下底線) 的方式命名


上一篇
[13th][Day1] 前言
下一篇
[13th][Day3] 保留字
系列文
還喝不 go23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言