# Day06 Go開教基本語法 (fmt) ## 輸入與輸出 #### 【fmt.Printf】 格式化輸出,用法跟C語言的printf一樣 https://play.golang.org/p/neZ-dtxckJb ```go a := 10 fmt.Printf("a: %d\n", a) ``` 常用到的`格式化輸出輸入`參數 %d: digit (10進位的數字) %c: char (字元) %s: string (字串) %v: value (值) %+v 見下方 %#v 見下方 參數 `v` 三者的差異: https://play.golang.org/p/UKM5CGI-AsR ```go type Name struct { A string B bool C int } func main() { fmt.Printf("%v \n", Name{}) fmt.Printf("%+v \n", Name{}) fmt.Printf("%#v \n", Name{}) } // { false 0} // {A: B:false C:0} // main.Name{A:"", B:false, C:0} ``` 用於查看物件結構時,非常方便使用 #### 【fmt.Print】 #### 【fmt.Println】 兩者與`fmt.Printf`相比,差在不能印格式化輸出 `Print`與`Println`兩者主要差在`ln`多了一個換行(new line) #### 跳脫字元 " "雙引號 內可跳脫字元\t \n等 ` `重音符 內則保留原始字串 https://play.golang.org/p/cmwxIvITZhi ```go func main() { fmt.Print("\t \n") fmt.Print(`\t \n`) } /* result: \t \n */ ``` #### 來比較一下這些Output https://play.golang.org/p/PgwCHCQzT5A ```go func main() { a := 10 fmt.Printf("a: %d\n", a) fmt.Println("a: ", a) s1 := "I" s2 := "am" s3 := "string" fmt.Printf("%s%s %s\n",s1, s2, s3) fmt.Println(s1 + s2 + s3) fmt.Println(s1, s2, s3) fmt.Println("========") fmt.Print(s1 + s2 + s3) fmt.Print(s1, s2, s3) } /* result: a: 10 a: 10 Iam string Iamstring I am string ======== IamstringIamstring */ ``` > 另外, > 在一些環境中,輸出最後會出現%百分比符號, > `%` 表示沒換行(new line)的符號 ![百分比符號](https://i.imgur.com/okhgane.png) ---- > 要玩`Input輸入`的話沒辦法在`playground`上執行 > `VScode`也沒辦法直接執行(好像得調一些設定) > 通常是在`Terminal`上 下指令 `$ go run main.go` > 但是`Goland IDE`**就是可以直接跑** > 等什麼,還不換? #### 【fmt.Scanf】 跟C語言一樣 fmt.Scanf("%d", &a) #### 【fmt.Scan】 #### 【fmt.Scanln】 ```go package main import "fmt" func main() { var a int fmt.Scanf("%d", &a) fmt.Println(a) } /* result: `User input` */ ``` ## 組合字串 #### 【fmt.Sprint】 #### 【fmt.Sprintln】 #### 【fmt.Sprintf】 `fmt.Sprint` 不會印出東西,基本上是拿來組合字串用的 組出來之後,需要一個變數去接 用`fmt.Sprint`組字串,比起操作字元、陣列,可讀性會較高一些。 https://play.golang.org/p/WgcVnCvfmBH ```go func main() { s1 := "I" s2 := "am" s3 := "string" str1 := fmt.Sprintln(s1, s2, s3) fmt.Println(str1) str2 := fmt.Sprint(s1, s2, s3) fmt.Println(str2) } /* result: I am string Iamstring */ ``` 可以看出Sprint、Sprintln的一些小差異。