Print输出方式

1.无换行打印

fmt.Print("内容", 123)

2.自动换行打印

//输出后末尾换行,多参数之间自动加空格分隔
fmt.Println("内容", 123)

3.格式化打印(占位符)

//支持 %s %d %f %v %T 等占位符,需手动加 \n 换行
fmt.Printf("姓名:%s,年龄:%d\n", "张三", 20)

4.格式化返回字符串(不直接输出)

//只生成字符串,存入变量,配合 Print 输出
s := fmt.Sprintf("a=%d", 10)
fmt.Print(s)

5.输出到 io.Writer(文件 / 缓冲区)

//Fprint/Fprintln/Fprintf:第一个参数为输出目标(终端、文件、bytes.Buffer)
fmt.Fprint(os.Stdout, "test")
fmt.Fprintln(os.Stdout, "test")
fmt.Fprintf(os.Stdout, "num=%d", 1)

log 包(日志打印,自带时间)

log.Print("普通日志")
log.Println("换行日志")
log.Printf("格式化日志 %d", 100)
// 直接打印并退出程序
log.Fatal("错误退出")
log.Fatalf("err: %v", err)
// 打印并抛出 panic
log.Panic("恐慌日志")
函数换行参数分隔格式化
Print无空格
Println空格分隔
Printf手动 \n占位符
Fprint/Fprintf可控同上支持输出到文件
Sprintf不输出占位符返回字符串

Sprintf:只生成字符串,不打印到控制台

name := "张三"
age := 22
str := fmt.Sprintf("姓名:%s,年龄:%d", name, age)
fmt.Println(str) // 再手动打印

Fprint/Fprintf/Sprintf 配套使用示例

package main

import (
	"bytes"
	"fmt"
	"os"
)

func main() {
	// 1. Sprintf 拼接字符串
	str := fmt.Sprintf("age=%d, hex=%#x", 18, 18)
	fmt.Println(str)

	// 2. Fprintf 输出到缓冲区
	buf := new(bytes.Buffer)
	fmt.Fprintf(buf, "float=%.2f", 3.1415)
	fmt.Println(buf.String())

	// 3. Fprint 无格式化直接输出
	fmt.Fprint(os.Stdout, "直接输出", 666)
}
/*结果
age=18, hex=0x12
float=3.14
直接输出666
*/