Go語言學習筆記參考書籍「Go語言編程」、Go官方標準庫
前文提要
上篇文章中留了個練習,查詢一下Go語言中fmt包下面Print
,Printf
,Println
三個函數的使用。
//Print採用默認格式將其參數格式化並寫入標準輸出。如果兩個相鄰的參數不只是字符串,則會在輸出之間添加空格
func Print(a ...interface{}) (n int, err error)
//Printf根據format參數生成格式化字符串並寫入標準輸出
func Printf(format string, a...interface{}) (n int, err error)
//Println採用默認格式化將其參數格式化並寫入標準輸出,在相鄰參數的輸出之間添加空格並在輸出結束後添加換行符
func Println(a ...interface{}) (n int, err error)
上面函數定義看不懂沒關係,後面學到接口就懂了。我們先借助例子來看一下這三個函數的區別:
a := "hello world"
b, c:= 123,456
fmt.Print(a,b,c, "\n")
fmt.Printf("%v%v%v\n", a,b,c) //一般使用%v來格式化輸出
fmt.Println(a,b,c)
輸出結果:
hello world123 456
hello world123456
hello world 123 456
可以看出,
Print
需要手動添加換行符,並且只有相鄰的參數不是字符串的情況下才會自動添加空格。Printf
的入參是string類型,可以根據參數類型使用%s, %d來格式化輸出。一般所有類型都可以使用%v來進行輸出。Println
會自動在相鄰參數之間添加空格並自動添加換行符。
變量
變量聲明
Go語言中引入了關鍵字var
,變量類型放在變量名之後。Go語言語句末尾不需要像C語言一樣用;
作爲結束標記。
var v1 int
var v2 string
var (
v3 float64
v4 *int
)//還可以將多個需要聲明的變量放在一起,一般用於全局變量中
var v5, v6, v7 int //多變量聲明
變量初始化
變量聲明完需要初始化變量,有三種方式:
var v1 int = 10
var v2 = 11
v3 := 1.0
當不寫變量類型的時候,Go語言可以從初始化表達式的右值推導出該變量的類型。如果變量初始化的時候未給變量指定初始值,則會程序會給變量一個的默認值,例如int型的默認值爲0.
注意:第三種初始化方式中,變量(v3)必須是未被聲明過
的,否則會導致編譯錯誤。
變量賦值
Go語言中認爲變量初始化和變量賦值是兩個概念。看例子:
var v1 string
v1 = "hello, world"
//Go語言中有類似python實現的多變量賦值功能
var i, j int = 1,2
i, j = j, i
同樣的,Go語言函數也可以返回多個值。
匿名變量
Go語言中還有一種變量,成爲匿名變量。像上面提到的函數返回多個值,就可以使用匿名變量來優化調用。
func getResult() (result string, err int){
result := "success"
err := 0
return result, err
}
result, _ := getResult()
當我們只想得到result
而不關心err
, 匿名變量的優勢就體現出來了,同樣的也可以用在for
循環中。
常量
定義常量
- 通過
const
關鍵字來定義常量,既可以指定常量類型,也可以不指定常量類型 - 常量定義的右值不能是程序運行期才能獲得的結果。
用例子說話:
const myname string = "Morgan"
const zero = 0.0
const (
number int64 = 1024
result = "success"
)
const v1, v2, v3 = 1, 2.0, "good"
const offset = 3 >> 2
//以上都是正確的寫法
const myPath = os.GetEnv("PATH")//build error, 因爲os.GetEnv()只有運行期才能獲得結果。
iota用法
iota
是Go語言預定的常量,iota
在每一個const
關鍵字出現時被reset爲0,然後在下一個iota出現之前,每出現一次iota
,自動加1。
const (
v0 = iota //v0 = 0, iota被reset爲0
v1 = iota //v1 = 1
v2 = iota //v2 = 2
)
const (
v3 = iota * 10 //v3 = 0, iota被reset爲0
v4 = iota * 10 //v4 = 10
v5 float32 = iota * 10 //v5 = 20.0
)
如果多個const
語句的賦值表達式是一樣的,則可以簡寫如下:
const (
v0 = iota
v1
v2
)
今天學習了變量和常量的用法,儘管涉及的代碼不多,但是編程語言的學習最忌眼高手低,因此我也按部就班的每一行都敲出來,並將程序運行。爲此針對自己的學習中涉及的代碼,整理了一個repo, 希望後續學習能使它變得充實起來。