fmt
fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf;格式“占位符”衍生自 C,但比 C 更简单。
以下例子中用到的类型或变量定义:
type Website struct {
Name string
}
// 定义结构体变量
var site = Website{Name:"studygolang"}
输出
函数类型
Print
Print 系列函数会将内容输出到系统的标准输出,区别在于
Print
函数直接输出内容Printf
函数支持格式化输出字符串Println
函数会在输出内容的结尾添加一个换行符。
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
Fprint
Fprint 系列函数会将内容输出到一个 io.Writer 接口类型的变量 w 中,我们通常用这个函数往文件中写入内容。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
例
// 向标准输出写入内容
fmt.Fprintln(os.Stdout, "向标准输出写入内容")
fileObj, err := os.OpenFile("./xx.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("打开文件出错,err:", err)
return
}
name := "枯藤"
// 向打开的文件句柄中写入内容
fmt.Fprintf(fileObj, "往文件中写如信息:%s", name)
Sprint
Sprint 系列函数会把传入的数据生成并返回一个字符串。
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
例
s1 := fmt.Sprint("枯藤")
name := "枯藤"
age := 18
s2 := fmt.Sprintf("name:%s,age:%d", name, age)
s3 := fmt.Sprintln("枯藤")
fmt.Println(s1, s2, s3)
Errorf
Errorf 函数根据 format 参数生成格式化字符串并返回一个包含该字符串的错误。
func Errorf(format string, a ...interface{}) error
通常使用这种方式来自定义错误类型,例如:
err := fmt.Errorf("这是一个错误")
格式化占位符
*printf
系列函数都支持 format 格式化参数
通用占位符
占位符 | 说明 |
---|---|
%v | 值的默认格式表示 |
%+v | 类似 %v,但输出结构体时会添加字段名 |
%#v | 值的 Go 语法表示 |
%T | 打印值的类型 |
%% | 百分号 |
例
fmt.Printf("%v\n", 100)
fmt.Printf("%v\n", false)
o := struct{ name string }{"枯藤"}
fmt.Printf("%v\n", o)
fmt.Printf("%#v\n", o)
fmt.Printf("%T\n", o)
fmt.Printf("100%%\n")
输出结果如下:
100
false
{枯藤}
struct { name string }{name:"枯藤"}
struct { name string }
100%
布尔值
占位符 | 说明 |
---|---|
%t | true 或 false |
整型
占位符 | 说明 |
---|---|
%b | 表示为二进制 |
%c |