今天來講一下怎麼讓你的Go程式透過fmt
這個package進行輸入與輸出的格式化
fmt 套件的主要功能是處理格式化的輸出和輸入,包括資料格式處理、字串解析和數值轉換等功能。通常用來記錄訊息、檔案處理等等
如果你之前寫過C語言的話,你一定會用到scanf這個函式,如果沒有的話,簡單來說就是可以把你在Console中的輸入傳到指定的變數(如python的input()
)。
不過輸入在Go語言中細分成了三個Function,分別為Scan, Scanln, Scanf,使用方式如下
func Scan(a ...any) (n int, err error)
func Scanf(format string, a ...any) (n int, err error)
func Scanln(a ...any) (n int, err error)
Scan
,但是讀取到換行就結束讀取func main(){
var a, b int
fmt.Scan(&a, &b)
fmt.Printf("a = %d, b = %d\n", a, b)
fmt.Scanf("a=%d b=%d", &a, &b)
fmt.Printf("a = %d, b = %d\n", a, b)
fmt.Scanln(&a, &b)
fmt.Printf("a = %d, b = %d\n", a, b)
}
每個參數間輸出時以空格分隔(等價於python的print(*a, sep=' ')
)
func Print(a ...any) (n int, err error)
func Printf(format string, a ...any) (n int, err error)
func Println(a ...any) (n int, err error)
Print
,不過結尾預設換行除了針對Console的輸入/輸出(stdin, stdout)以外,Go還支援直接對字串或檔案進行類似操作,只需要在前面指定你的目標檔案或字串,然後像用Scan或Print一樣就行
Scan
跟Print
相關指定其實本質上都是透過Fscan
或Fprint
並指定檔案為stdin
或stdout
做到的// this is the source code of go
// src/fmt/print.go
func Print(a ...any) (n int, err error) {
return Fprint(os.Stdout, a...)
}
func Println(a ...any) (n int, err error) {
return Fprintln(os.Stdout, a...)
}
func Printf(format string, a ...any) (n int, err error) {
return Fprintf(os.Stdout, format, a...)
}
// src/fmt/scan.go
func Scanf(format string, a ...any) (n int, err error) {
return Fscanf(os.Stdin, format, a...)
}
func Scanln(a ...any) (n int, err error) {
return Fscanln(os.Stdin, a...)
}
func Scan(a ...any) (n int, err error) {
return Fscan(os.Stdin, a...)
}
func Fscan(r io.Reader, a ...any) (n int, err error)
func Fscanf(r io.Reader, format string, a ...any) (n int, err error)
func Fscanln(r io.Reader, a ...any) (n int, err error)
func Fprint(w io.Writer, a ...any) (n int, err error)
func Fprintf(w io.Writer, format string, a ...any) (n int, err error)
func Fprintln(w io.Writer, a ...any) (n int, err error)
使用方式跟Scan或Print一樣,不過Sprint會回傳結果為字串
func Sscan(a ...any) (n int, err error)
func Sscanf(format string, a ...any) (n int, err error)
func Sscanln(a ...any) (n int, err error)
func Sprint(a ...any) string
func Sprintf(format string, a ...any) string
func Sprintln(a ...any) string
format(string)
: 指定輸入格式n(int)
: 成功接收到的變數數量...any
: 可以接受0~多個任意型態變數輸入,或將變數解包(可以理解成python的*args
)error
: 錯誤資訊在Go語言中稱為verbs
,用於fmt包中的格式化函數(如fmt.Printf
、fmt.Sprintf
等)
對於格式化function(Printf, Sprintf, and Fprintf)
,可以透過在format string中設定index決定使用第幾個參數
For example,
fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
will yield "22 11", while
fmt.Sprintf("%[3]*.[2]*[1]f", 12.0, 2, 6)
equivalent to
fmt.Sprintf("%6.2f", 12.0)
will yield " 12.00". Because an explicit index affects subsequent verbs, this notation can be used to print the same values multiple times by resetting the index for the first argument to be repeated:
fmt.Sprintf("%d %d %#[1]x %#x", 16, 17)
will yield "16 17 0x10 0x11"[name=Golang Documentation]
struct
則是輸出該struct中的所有fields的valuestruct
使用%+v
可以把輸出加上name那麼今天的文章就到這告一段落,如果我的文章有任何地方有錯誤請在留言區反應
明天將會介紹Go語言的條件與跳轉