Golang 學習筆記一
跟隨 Golang 官方教程學習筆記
Exported Name
在 package 中,有且只有以大寫開頭的變數、函數、類型會被外面所訪問
Basic types
Go 基本類型
boolnnstringnnint int8 int16 int32 int64nuint uint8 uint16 uint32 uint64 uintptrnnbyte // alias for uint8nnrune // alias for int32n // represents a Unicode code pointnnfloat32 float64nncomplex64 complex128n
int uint uintptr 是 32 位如果當前系統為 32 位,64 位如果當前系統為 64 位
輸出格式
fmt.Printf 輸出格式說明
- %T 類型
- %v 值
初始值
- 0 for number
- false for bool
- "" for string
Type Conversion 類型轉化
在 Go 中沒有默認類型轉化機制,如果類型不匹配將會拋出錯誤
基本類型轉化 T(v) T 是類型, v 是值,如:
i := 10nvar f float = float(i)n// var f float = i # errorn
不同類型之間不能進行運算,甚至不能夠進行比較 int + float error
const
常量與變數聲明不一致
// 變數,使用 :=nvar i := 1n// 常量,使用 =nconst Pi = 3.14n
常量還可以作為枚舉
常量中比較特殊的關鍵字 iota
Numeric constants are high-precision values. Go 將保留所有精確值
package mainnnimport "fmt"nnconst (n// Create a huge number by shifting a 1 bit left 100 places.n// In other words, the binary number that is 1 followed by 100 zeroes.nBig = 1 << 100n// Shift it right again 99 places, so we end up with 1<<1, or 2.nSmall = Big >> 99n)nnfunc needInt(x int) int { return x*10 + 1 }nfunc needFloat(x float64) float64 {nreturn x * 0.1n}nnfunc main() {n fmt.Println(needInt(Small))n fmt.Println(needFloat(Small))n fmt.Println(needFloat(Big))n}n
output:
21n0.2n1.2676506002282295e+29n
for - loop
以下代碼省略 condition statement 將會引起無限循環
for ;; {n fmt.Println("hello world")n}n
if
相對與其他語言,Go 中支持 if 像 for-loop 一樣先執行 init,init 中聲明的變數只能在 if {} else {} 中使用
if v:=method(); v == 0 {nstatment()n}else{n}n// cannot use v from heren
switch
switch 是一連串 if-else 的簡寫,但是 Go 中 switch 與 C java 不同,Go 中只有命中的 case 會被執行。所以 break 相當於出現在每個 case 之後
func test_switch() {n fmt.Println("Go runs on")nswitch os := runtime.GOOS; os {ncase "darwin":n fmt.Println("OS X")ncase "linux":n fmt.Println("Linux")ndefault:n fmt.Printf("%sn", os)n }n}n
swithc without the condition == 選擇第一個 true case,空 switch 有利於書寫很長的 if-else 語句
func switch3() {nt := time.Now()n// without condition equals to select truenswitch {ncase t.Hour() < 12:n fmt.Println("Good morning")ncase t.Hour() < 17:n fmt.Println("Good afternoon")ndefault:n fmt.Println("Good evening")n }n}n
不想 C java 中 case 緊隨一定要是常量,Go 中 case 後可以跟隨任何變數,甚至函數
defer
defer 語句能夠推遲某些語句的執行,直到 return 語句附近
func defer1() {ndefer fmt.Println("world")ndefer fmt.Println("AAAA")nn fmt.Println("Hello")n}n
defer 將語句放到最後執行,然後將語句執行的順序完全相反。其背後是通過棧(FILO)實現的。
output:
HellonAAAAnworldn
推薦閱讀:
※備忘131228
※極光日報 第 207-208 期 | 2017 / 7 / 5 - 6
※matlab 降低演算法時間複雜度的方法?
※Python3 CookBook | 數據結構和演算法(二)