格式化輸出,用法跟C語言的printf一樣
https://play.golang.org/p/neZ-dtxckJb
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
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.Printf
相比,差在不能印格式化輸出
Print
與Println
兩者主要差在ln
多了一個換行(new line)
" "雙引號 內可跳脫字元\t \n等
` `重音符 內則保留原始字串
https://play.golang.org/p/cmwxIvITZhi
func main() {
fmt.Print("\t \n")
fmt.Print(`\t \n`)
}
/* result:
\t \n
*/
https://play.golang.org/p/PgwCHCQzT5A
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
就是可以直接跑
等什麼,還不換?
跟C語言一樣
fmt.Scanf("%d", &a)
package main
import "fmt"
func main() {
var a int
fmt.Scanf("%d", &a)
fmt.Println(a)
}
/* result:
`User input`
*/
fmt.Sprint
不會印出東西,基本上是拿來組合字串用的
組出來之後,需要一個變數去接
用fmt.Sprint
組字串,比起操作字元、陣列,可讀性會較高一些。
https://play.golang.org/p/WgcVnCvfmBH
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的一些小差異。