笨辦法學golang(二)

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循環中。

常量

定義常量

  1. 通過const關鍵字來定義常量,既可以指定常量類型,也可以不指定常量類型
  2. 常量定義的右值不能是程序運行期才能獲得的結果。

用例子說話:

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, 希望後續學習能使它變得充實起來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章