# 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)的符號

----
> 要玩`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的一些小差異。