// 多语言支持 type Language int const ( En Language = iota Zh )
func(l Language)DateFormat()string { switch l { case En: return"January 02, 2006" case Zh: return"2006年01月02日" default: return"2006-01-02" } }
funcprintLocalizedDate(lang Language, t time.Time) { fmt.Printf(t.Format(lang.DateFormat())) }
性能优化
// 使用 bytes.Buffer 代替 fmt.Sprintf 构建大字符串 var buf bytes.Buffer for i := 0; i < 1000; i++ { fmt.Fprintf(&buf, "Item %d: %f\n", i, math.Sqrt(float64(i))) } result := buf.String()
funcshowProgress(current, total int) { percent := float64(current) / float64(total) * 100 barWidth := 50 filled := int(float64(barWidth) * current / total fmt.Printf("\r[%s%s] %.2f%%", strings.Repeat("=", filled), strings.Repeat(" ", barWidth-filled), percent) if current == total { fmt.Println() } }
十六进制转储
funchexDump(data []byte) { for i := 0; i < len(data); i += 16 { // 偏移量 fmt.Printf("%08x ", i) // 十六进制 for j := 0; j < 16; j++ { if i+j < len(data) { fmt.Printf("%02x ", data[i+j]) } else { fmt.Print(" ") } if j == 7 { fmt.Print(" ") } } fmt.Print(" ") // ASCII for j := 0; j < 16; j++ { if i+j < len(data) { b := data[i+j] if b >= 32 && b <= 126 { fmt.Printf("%c", b) } else { fmt.Print(".") } } } fmt.Println() } }
表格数据对齐
funcprintTable(data [][]string) { // 计算列宽 colWidths := make([]int, len(data[0])) for _, row := range data { for i, cell := range row { iflen(cell) > colWidths[i] { colWidths[i] = len(cell) } } } // 打印表格 for _, row := range data { for i, cell := range row { fmt.Printf("| %-*s ", colWidths[i], cell) } fmt.Println("|") } }
常见陷阱与最佳实践
常见错误
// 1. 参数类型不匹配 var count int = 5 fmt.Printf("%s", count) // 错误:%!s(int=5)
// 2. 忘记处理错误 n, err := fmt.Sscanf(input, "%d", &value) // 应该检查 err 和 n
// 3. 性能问题(大量小字符串拼接) var s string for i := 0; i < 10000; i++ { s += fmt.Sprintf("%d", i) // 低效 }
// 正确方式 var builder strings.Builder for i := 0; i < 10000; i++ { fmt.Fprintf(&builder, "%d", i) } s := builder.String()