標籤:

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 | 數據結構和演算法(二)

TAG:笔记 | 编程 |