編程筆記 Golang基礎 013 格式化輸入輸出
- 一、格式化輸出
- 1. fmt.Print系列函數
- 2. Printf格式說明
- 3. 格式化布爾類型
- 二、格式化輸入
- 1. fmt.Scan系列函數
- 注意事項
- 三、練習
- 小結
Go語言中的格式化輸入和輸出主要通過標準庫
fmt
包來實現。主要是輸出需要格式化。
一、格式化輸出
1. fmt.Print系列函數
fmt.Println
: 輸出內容并自動添加換行符。fmt.Printf
: 格式化的輸出,允許按照指定的格式字符串打印變量值。fmt.Print
: 輸出內容,不添加換行符。
package main
import "fmt"func main() {fmt.Println("Hello, World!") // 自動添加換行fmt.Printf("Today is %s\n", "2024年2月21日") // 格式化輸出日期fmt.Print("No newline here") // 不會自動添加換行
}
2. Printf格式說明
Printf
的格式字符串中可以包含特殊的占位符(如 %d
, %s
, %v
, %T
等),它們會被相應類型的變量替換:
%d
: 整數%f
或%g
: 浮點數或科學計數法表示的數字%t
: 布爾類型%s
: 字符串%v
: 值的默認格式表示(根據不同類型顯示)%#v
: 類似%v
,但輸出結構體時會包含字段名%T
: 輸出值的類型名稱%q
: 雙引號包裹的字符串字面量形式(適用于字符串和字符)%p
: 指針的內存地址
示例:
fmt.Printf("%d, %.2f, %t, %s, %#v, %T\n", 123, 3.14159, true, "Golang", struct{A int}{A: 42}, myVar)
3. 格式化布爾類型
布爾類型的值在使用 %t
格式化時,會輸出 true
或 false
。
var isDone bool = false
fmt.Printf("Task is done? %t\n", isDone) // 輸出:Task is done? false
二、格式化輸入
1. fmt.Scan系列函數
fmt.Scan
: 從標準輸入讀取數據到一系列變量中,空格作為分隔符。fmt.Scanf
: 類似于 C 中的scanf
,接受一個格式字符串和對應變量列表,根據格式進行輸入。fmt.Scanln
: 類似于Scanf
,但在讀取一行后停止,并丟棄結尾的換行符。fmt.Sscan
: 從字符串中掃描。fmt.Sscanf
: 類似于Scanf
,但是針對字符串而不是標準輸入。fmt.Sscanln
: 對字符串進行類似 Scanln 的操作。
示例:
var name string
var age int
fmt.Println("請輸入姓名和年齡(用空格分隔)")
_, _ = fmt.Scan(&name, &age) // 從鍵盤輸入讀取姓名和年齡// 或者使用 Sscanf 從已知字符串讀取
input := "Alice 30"
fmt.Sscanf(input, "%s %d", &name, &age)
注意事項
- 使用格式化輸入時務必注意安全性和有效性檢查,確保輸入的數據能夠正確轉換為預期類型。
- 在處理用戶輸入時,應盡可能避免直接將輸入用于數據庫查詢等敏感操作,防止 SQL 注入等問題。
- Go 語言推薦使用
fmt.Scan
和fmt.Scanln
的變體fmt.Scanf
和fmt.Scanf
以及其配套的格式字符串進行精確控制輸入解析。
三、練習
type user struct {name string
}func main() {u := user{"guo"}//Printf 格式化輸出fmt.Printf("% + v\n", u) //格式化輸出結構fmt.Printf("%#v\n", u) //輸出值的 Go 語言表示方法fmt.Printf("%T\n", u) //輸出值的類型的 Go 語言表示fmt.Printf("%t\n", true) //輸出值的 true 或 falsefmt.Printf("%b\n", 1024) //二進制表示fmt.Printf("%c\n", 11111111) //數值對應的 Unicode 編碼字符fmt.Printf("%d\n", 10) //十進制表示fmt.Printf("%o\n", 8) //八進制表示fmt.Printf("%q\n", 22) //轉化為十六進制并附上單引號fmt.Printf("%x\n", 1223) //十六進制表示,用a-f表示fmt.Printf("%X\n", 1223) //十六進制表示,用A-F表示fmt.Printf("%U\n", 1233) //Unicode表示fmt.Printf("%b\n", 12.34) //無小數部分,兩位指數的科學計數法6946802425218990p-49fmt.Printf("%e\n", 12.345) //科學計數法,e表示fmt.Printf("%E\n", 12.34455) //科學計數法,E表示fmt.Printf("%f\n", 12.3456) //有小數部分,無指數部分fmt.Printf("%g\n", 12.3456) //根據實際情況采用%e或%f輸出fmt.Printf("%G\n", 12.3456) //根據實際情況采用%E或%f輸出fmt.Printf("%s\n", "wqdew") //直接輸出字符串或者[]bytefmt.Printf("%q\n", "dedede") //雙引號括起來的字符串fmt.Printf("%x\n", "abczxc") //每個字節用兩字節十六進制表示,a-f表示fmt.Printf("%X\n", "asdzxc") //每個字節用兩字節十六進制表示,A-F表示fmt.Printf("%p\n", 0x123) //0x開頭的十六進制數表示
}
小結
初學必備知識。實際開發中也會經常用到。