Golang fmt库格式化输出与使用技巧

fmt库核心是Printf、Sprintf、Fprintf函数,通过格式化动词如%v、%d、%f等控制输出;支持精度、宽度、flag等高级格式化;可通过实现Stringer接口自定义类型输出;结合json库可格式化输出JSON数据。

golang fmt库格式化输出与使用技巧

Golang的

fmt

库是格式化输出的核心,它提供了强大的功能,可以将各种类型的数据转换为字符串,并按照指定的格式输出到控制台或文件中。掌握

fmt

库的使用,能显著提高代码的可读性和调试效率。

解决方案:

fmt

库的核心在于

Printf

Sprintf

Fprintf

等函数。

Printf

直接输出到标准输出,

Sprintf

返回格式化后的字符串,

Fprintf

则输出到

io.Writer

接口,比如文件。

格式化动词是关键。

%v

是默认格式,

%T

输出类型,

%d

是十进制整数,

%f

是浮点数,

%s

是字符串,

%p

是指针地址。还有

%b

二进制,

%o

八进制,

%x

十六进制。

立即学习“go语言免费学习笔记(深入)”;

举个例子:

package mainimport "fmt"func main() {    name := "Alice"    age := 30    pi := 3.14159    fmt.Printf("Name: %s, Age: %d, Pi: %fn", name, age, pi) // 基本用法    fmt.Printf("Pi with 2 decimals: %.2fn", pi)       // 精度控制    fmt.Printf("Age in binary: %bn", age)              // 二进制    fmt.Printf("Type of pi: %Tn", pi)                  // 类型    fmt.Printf("Value of pi: %vn", pi)                  // 值    fmt.Printf("Default format for struct: %vn", struct{ X, Y int }{10, 20})    fmt.Printf("Detailed format for struct: %+vn", struct{ X, Y int }{10, 20})    fmt.Printf("Go syntax format for struct: %#vn", struct{ X, Y int }{10, 20})    str := fmt.Sprintf("Name: %s, Age: %d", name, age) // Sprintf 用法    fmt.Println(str)}
%+v

%#v

在输出结构体时很有用。

%+v

会输出字段名,

%#v

会输出Go语法格式的结构体字面量,方便复制粘贴。

如何使用fmt格式化输出JSON数据?

可以使用

encoding/json

库配合

fmt.Printf

。先将JSON数据Unmarshal到结构体或者map,然后用

fmt.Printf

%+v

%#v

输出。或者直接使用

json.MarshalIndent

格式化输出JSON字符串。

package mainimport (    "encoding/json"    "fmt"    "log")type Person struct {    Name string `json:"name"`    Age  int    `json:"age"`}func main() {    jsonData := `{"name": "Bob", "age": 25}`    var person Person    err := json.Unmarshal([]byte(jsonData), &person)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Person: %+vn", person)    // 使用 MarshalIndent 格式化 JSON    prettyJSON, err := json.MarshalIndent(person, "", "  ")    if err != nil {        log.Fatal(err)    }    fmt.Println(string(prettyJSON))}

fmt库的格式化动词有哪些高级用法?

除了基本的格式化动词,

fmt

还支持一些高级用法,例如宽度和精度控制、flag的使用。

宽度控制可以用来对齐输出,精度控制可以用来控制浮点数的小数位数。Flag可以用来控制输出的符号、进制等。

package mainimport "fmt"func main() {    num := 123.456    fmt.Printf("%10.2fn", num) // 宽度为10,保留2位小数    fmt.Printf("%+dn", 10)    // 显示正号    fmt.Printf("%#xn", 255)   // 输出0xff    fmt.Printf("%05dn", 12)   // 补零}
%10.2f

表示输出一个浮点数,总宽度为10个字符,保留2位小数。如果实际数字的宽度小于10,则会在左侧填充空格。

%+d

表示输出带正号的整数。

%#x

表示输出带

0x

前缀的十六进制数。

%05d

表示输出一个整数,总宽度为5个字符,如果实际数字的宽度小于5,则会在左侧填充0。

如何自定义fmt的输出格式?

可以通过实现

Stringer

接口来自定义类型的字符串表示形式。

Stringer

接口只有一个方法

String() string

。当使用

%s

%v

格式化输出实现了

Stringer

接口的类型时,

fmt

库会自动调用该类型的

String()

方法。

package mainimport "fmt"type Point struct {    X, Y int}func (p Point) String() string {    return fmt.Sprintf("(%d, %d)", p.X, p.Y)}func main() {    point := Point{X: 10, Y: 20}    fmt.Printf("Point: %sn", point) // 调用 Point 的 String() 方法    fmt.Printf("Point: %vn", point) // 调用 Point 的 String() 方法}

这个例子中,

Point

类型实现了

Stringer

接口,

String()

方法返回一个表示坐标的字符串。当使用

%s

%v

格式化输出

Point

类型时,

fmt

库会自动调用

String()

方法,输出自定义的字符串表示形式。这使得我们可以更灵活地控制类型的输出格式。

以上就是Golang fmt库格式化输出与使用技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月15日 20:54:14
下一篇 2025年12月15日 20:54:24

相关推荐

  • Golang微服务配置中心与动态管理

    Golang微服务需独立配置中心以实现配置动态管理,解决编译型语言修改配置需重启的问题。通过将配置集中存储于Etcd、Consul或Nacos等中心化服务,客户端利用监听机制(如Watch API)实时获取变更,并结合sync.RWMutex保证并发安全,实现热加载。典型实现包括定义配置结构体、创建…

    好文分享 2025年12月15日
    000
  • go语言适合做web开发吗?

    Go语言适合Web开发,其核心优势在于Goroutines和Channels构建的高效并发模型,能轻松处理高并发场景;编译型语言特性带来高性能、低延迟和快速启动,配合net/http标准库实现轻量高效的Web服务;语法简洁、工具链完善,提升开发效率与团队协作。尽管存在if err != nil带来的…

    2025年12月15日
    000
  • Golang初级项目中常用第三方库使用实践

    答案:Golang初级项目常用viper、zap、gin、gorm等库提升开发效率。viper管理多格式配置并支持热更新,建议结合结构体解码;zap提供结构化日志,开发阶段可用NewDevelopment模式;gin构建RESTful服务,API简洁且易集成中间件;gorm作为ORM库支持主流数据库…

    2025年12月15日
    000
  • Golang中如何通过反射将一个map的值动态填充到一个结构体中

    答案:通过反射将map键值对填充到结构体需满足字段可导出、类型匹配且可写。遍历map,用FieldByName查找字段,验证可设置性后调用Set赋值。支持指针传参、基本类型匹配,扩展需处理标签、类型转换与嵌套结构。示例实现包含错误处理与类型校验,适用于配置解析等场景,但性能较低,建议使用mapstr…

    2025年12月15日
    000
  • Go与C++互操作:Cgo的局限性与SWIG的解决方案

    本文探讨Go语言与C++代码互操作的方法。Cgo主要设计用于与C语言库进行安全调用,而直接在Cgo中混合C++代码会导致链接错误。对于Go程序调用C++库的需求,官方推荐使用SWIG#%#$#%@%@%$#%$#%#%#$%@_20dc++e2c6fa909a5cd62526615fe2788a,它…

    2025年12月15日
    000
  • Go语言实现生成器:通道、协程与内存管理

    本文探讨了如何在Go语言中利用协程(goroutines)和通道(channels)实现类似于Python生成器的功能。我们将深入分析通道缓冲对性能的影响,并重点讨论在实现此类并发模式时,如何正确管理通道的生命周期、避免内存泄漏,并通过示例代码展示Go语言中生成器的最佳实践。 在go语言中,虽然没有…

    2025年12月15日
    000
  • Go与C++互操作:Cgo的局限性及SWIG的解决方案

    本文探讨了在Go语言中使用C++代码的挑战与解决方案。虽然Cgo是Go与C语言交互的官方机制,但其设计主要针对C库。对于C++代码的集成,官方推荐使用SWIG#%#$#%@%@%$#%$#%#%#$%@_20dc++e2c6fa909a5cd62526615fe2788a,它能有效生成Go与C++之…

    2025年12月15日
    000
  • GolangTLS/SSL安全通信配置方法

    答案:Go中实现TLS/SSL通信需配置tls.Config并结合net/http或net.Listener使用。启用HTTPS服务需设置服务器Addr、Handler及TLSConfig,指定最小TLS版本(如1.2)、安全曲线(如X25519)和加密套件(如AES-GCM、ChaCha20)。通…

    2025年12月15日
    000
  • GolangHTTP请求限流与并发控制技巧

    使用令牌桶限流、goroutine池控并发、context管理超时,可构建高并发下稳定高效的Go HTTP客户端,避免资源耗尽与服务崩溃。 在高并发场景下,Go语言的HTTP客户端如果不做限流和并发控制,很容易对目标服务造成压力甚至导致服务崩溃。同时,自身程序也可能因为资源耗尽而出现性能下降或崩溃。…

    2025年12月15日
    000
  • GolangIDE插件管理与扩展配置方法

    正确配置IDE插件与工具链可显著提升Go开发效率。1. VS Code需安装官方Go插件,自动或手动安装gopls、dlv等工具,并在settings.json中设置GOPROXY代理;2. GoLand通过Plugins市场集成YAML、Markdown等辅助插件,可在Tooling中配置revi…

    2025年12月15日
    000
  • CentOS 7系统如何通过源码编译方式安装Golang

    答案:在CentOS 7上通过源码编译安装Golang需先安装gcc等开发工具,再下载Go源码包解压至/usr/local,运行all.bash脚本编译,随后配置GOROOT、GOPATH和PATH环境变量并使其生效,最后通过go version验证安装成功。 在CentOS 7系统上通过源码编译方…

    2025年12月15日
    000
  • GolangUDP广播与多播通信实现示例

    Golang中UDP支持广播与多播,广播用于局域网服务发现,需设置广播地址并启用广播选项,如192.168.1.255:8080;多播则通过组播组(224.0.0.0/8)实现高效一对多通信,接收端须加入组,如224.0.0.1:9999,适用于音视频流分发,相比TCP更轻量,适合实时场景。 在 G…

    2025年12月15日
    000
  • Golang math库常用数学函数操作方法

    Golang的math库提供常用数学函数,包括Abs、Ceil、Floor、Round、Trunc等基本运算,Pow、Sqrt、Exp、Log等指数对数函数,Sin、Cos、Tan等三角函数,以及Pi、Inf、NaN等特殊值处理;避免NaN需验证输入并使用math.IsNaN检查;随机数生成使用ma…

    2025年12月15日
    000
  • Golang文件IO与网络编程结合实践

    答案是通过Go的并发机制和I/O优化策略高效结合文件IO与网络编程。利用net/http处理HTTP请求,io.Copy实现高效数据流拷贝,每个请求由独立goroutine处理;通过限制并发写入、异步持久化、临时文件原子替换等策略保障数据一致性与性能;结合sync.Pool、缓冲写入、零拷贝等方法应…

    2025年12月15日
    000
  • Golang使用reflect.Value获取变量值实例

    使用reflect.ValueOf获取基本类型值,通过Interface或Int等方法提取;2. 指针需调用Elem获取指向的值并可修改;3. 结构体字段值通过遍历可导出字段获取。 在Go语言中,reflect.Value 是反射机制的核心类型之一,它能让我们在运行时动态地获取变量的值、类型以及进行…

    2025年12月15日
    000
  • Golang使用Zap日志库与结构化日志实践

    答案:通过zap.Config配置开发和生产环境日志,使用全局Logger、With添加上下文、合理分级,并利用Sampling、Hooks、自定义Encoder和Lumberjack集成实现高效结构化日志。 Golang中使用Zap日志库进行结构化日志记录,核心在于提升日志的可读性、可搜索性和可分…

    2025年12月15日
    000
  • Golang微服务注册中心Eureka/Nacos集成

    Nacos是Golang微服务集成服务注册中心的更优选择,因其提供官方SDK(nacos-sdk-go)、支持多语言生态、具备动态配置管理功能,且社区活跃;而Eureka缺乏官方Go支持,需自行实现REST API交互或采用Sidecar模式,集成成本高。通过nacos-sdk-go可便捷实现服务注…

    2025年12月15日
    000
  • Golang减少GC暂停时间的优化策略

    优化Golang的GC暂停需从减少内存分配、复用对象、预分配容量、使用sync.Pool、优化数据结构和调整GOGC入手,结合pprof分析内存热点,精准定位并消除高频分配点,从而降低GC压力和暂停时间。 Golang的GC暂停时间优化,核心在于精细化管理内存的分配与回收节奏。简单来说,就是想办法让…

    2025年12月15日
    000
  • go语言适合做哪些开发工作?

    Go语言在构建高并发、高性能后端服务时,核心优势在于其轻量级goroutine和channel构成的并发模型,能高效处理海量并发;强大的标准库(如net/http)支持快速构建网络服务;编译为单一静态二进制文件,部署简单,适合云原生环境;类型安全和显式错误处理提升系统可靠性。这些特性使Go成为微服务…

    2025年12月15日
    000
  • GolangWeb项目路由优化与请求调度实践

    模块化路由设计提升Golang Web系统可维护性与性能。通过gin等框架按业务拆分路由组,实现清晰结构(如SetupUserRoutes管理用户路由);利用中间件分层调度,全局日志、局部权限校验(如AuthMiddleware作用于/api组)提升复用与安全;优化路由匹配,采用静态路径、减少嵌套、…

    2025年12月15日
    000

发表回复

登录后才能评论
关注微信