【GoLang】Go语言几种标准库介绍(三)

文章目录

      • 前言
      • 几种库
        • debug 库 (各种调试文件格式访问及调试功能)
          • 相关的包和工具:
          • 示例
        • encoding (常见算法如 JSON、XML、Base64 等)
          • 常用的子包和其主要功能:
          • 示例
        • flag(命令行解析)
          • 关键概念:
          • 示例
          • 示例执行
      • 总结
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

前言

上一篇,我们介绍了container、crypto、database三个库,这篇我们继续介绍剩下的库


几种库

debug 库 (各种调试文件格式访问及调试功能)

在 Go 语言的标准库中,并没有一个名为 debug 的独立库。

然而,Go 提供了一系列的工具和包,用于调试和性能分析。

这些工具和包包括 debug/pprofruntime/pprofnet/http/pprof 等,用于生成和分析性能剖析数据。

相关的包和工具:
  1. runtime/pprof 提供了运行时性能分析的功能,可以用于查看 CPU 和内存的使用情况。它通过在代码中插入特殊的语句来收集性能数据。
  2. net/http/pprof 提供了 HTTP 接口,用于在运行时进行性能分析。可以通过浏览器或使用 go tool pprof 工具来查看分析结果。
  3. debug/pprofnet/http/pprof 提供了基础的实现,可以方便地将性能分析数据暴露为 HTTP 端点。
示例

net/http/pprof 包的示例

package mainimport (_ "net/http/pprof""net/http""time"
)func main() {// 启动 HTTP 服务go func() {http.ListenAndServe(":6060", nil)}()// 示例业务逻辑for {work()time.Sleep(time.Second)}
}func work() {// 模拟业务逻辑for i := 0; i < 1000; i++ {_ = i * i}
}

在这个示例中,通过导入 _ "net/http/pprof" 来注册 net/http/pprof 包的 HTTP 处理器。

然后,通过 http.ListenAndServe 在后台启动一个 HTTP 服务,监听在 localhost:6060 地址上。

这样,我们可以在浏览器中访问 http://localhost:6060/debug/pprof/,查看性能分析数据。

encoding (常见算法如 JSON、XML、Base64 等)

在 Go 语言的标准库中,encoding 包提供了对各种数据编码和解码的支持。

这个包包括了常见的数据编码格式,如 JSON、XML、Base64 等。

encoding 包中的子包主要包括 encoding/jsonencoding/xmlencoding/base64 等。

常用的子包和其主要功能:
  1. encoding/json 用于 JSON 格式的编码和解码。支持将 Go 数据结构转换为 JSON 格式的字符串,以及将 JSON 格式的字符串解码为 Go 数据结构。
  2. encoding/xml 用于 XML 格式的编码和解码。支持将 Go 数据结构转换为 XML 格式的字符串,以及将 XML 格式的字符串解码为 Go 数据结构。
  3. encoding/base64 用于 Base64 编码和解码。支持将数据进行 Base64 编码,以及将 Base64 编码的数据解码为原始数据。
示例

使用 encoding/json 包将 Go 结构体编码为 JSON 格式的字符串,以及将 JSON 格式的字符串解码为 Go 结构体

package mainimport ("encoding/json""fmt"
)// 定义一个结构体
type Person struct {Name  string `json:"name"`Age   int    `json:"age"`City  string `json:"city"`
}func main() {// 创建一个 Person 对象person := Person{Name: "John Doe",Age:  30,City: "New York",}// 将结构体编码为 JSON 格式的字符串jsonData, err := json.Marshal(person)if err != nil {fmt.Println("Error encoding JSON:", err)return}// 打印 JSON 数据fmt.Println("JSON Data:", string(jsonData))// 将 JSON 格式的字符串解码为结构体var decodedPerson Personerr = json.Unmarshal(jsonData, &decodedPerson)if err != nil {fmt.Println("Error decoding JSON:", err)return}// 打印解码后的结构体fmt.Printf("Decoded Person: %+v\n", decodedPerson)
}

在这个示例中,定义了一个名为 Person 的结构体,然后使用 json.Marshal 将该结构体编码为 JSON 格式的字符串,再使用 json.Unmarshal 将 JSON 格式的字符串解码为 Person 结构体。

这种方式非常适用于在网络传输或存储数据时,需要进行数据编码和解码的场景。

flag(命令行解析)

在 Go 语言的标准库中,flag 包提供了一种简单的命令行参数解析方式,用于处理命令行输入的参数。

通过 flag 包,你可以方便地定义和解析命令行标志,而不需要手动解析命令行参数。

关键概念:
  1. Flag: 表示命令行标志,可以是布尔型、整型、浮点型、字符串型等。
  2. Command Line Arguments: 是程序执行时传递给程序的参数。这些参数通常以标志(flag)的形式出现,例如 -name=value
  3. Flag Set: flag 包中的 FlagSet 类型,用于表示一组命令行标志的集合。
示例
package mainimport ("flag""fmt"
)func main() {// 定义命令行标志var name stringvar age intvar married boolflag.StringVar(&name, "name", "John Doe", "Specify the name")flag.IntVar(&age, "age", 30, "Specify the age")flag.BoolVar(&married, "married", false, "Specify marital status")// 解析命令行参数flag.Parse()// 打印解析后的值fmt.Println("Name:", name)fmt.Println("Age:", age)fmt.Println("Married:", married)
}

在这个示例中,我们使用 flag 包定义了三个命令行标志:nameagemarried

然后,通过 flag.StringVarflag.IntVarflag.BoolVar 分别为这些标志绑定变量。最后,通过 flag.Parse 解析命令行参数,并打印解析后的值。

示例执行
go run main.go -name=Alice -age=25 -married=true

在执行时,在命令行中指定 -name-age-married 等标志,程序会解析这些标志的值,并输出相应的结果。


总结

这里我们介绍了2个库debug、encoding、flag, 下一篇我们将介绍其他的几种标准库


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

csdn-end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtitanRibbon 开始使用实例

新建一个界面程序&#xff1a; 修改项目里面的源码&#xff1a; 至此&#xff0c;一个简单界面就出来了&#xff0c;效果如下所示&#xff1a;

游戏软件缺少d3dcompiler.dll文件的多种修复方法分享

在操作系统中&#xff0c;d3dcompiler.dll是一个非常重要的组件&#xff0c;主要负责DirectX图形技术的编译和解析。许多用户在安装或使用某些软件时&#xff0c;提示“缺少d3dcompiler.dll”。这个错误通常出现在游戏或应用程序运行时&#xff0c;它会导致程序无法正常启动或运…

C#-CSC编译环境搭建

一.Microsoft .NET Framework 确保系统中安装Microsoft .NET Framework相关版本下载 .NET Framework 4.7 | 免费官方下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net47 二.编译环境搭建 已经集成编译工具csc.exe,归档至gitcode,实现us…

springboot基于Java的大学生迎新系统

springboot基于Java的大学生迎新系统 源码获取&#xff1a; https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

探秘HyperLogLog:Redis中的基数统计黑科技

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 探秘HyperLogLog&#xff1a;Redis中的基数统计黑科技 前言HyperLogLog简介基数和基数统计的重要性HyperLogLog的历史和革命性 HyperLogLog的工作原理哈希函数线性计数与对数计数HyperLogLog的核心算法…

【基础】【Python网络爬虫】【13.免费代理与付费代理】(附大量案例代码)(建议收藏)

Python网络爬虫基础 一、免费代理1. 什么是代理IP2. 代理IP的类型3. 代理IP的作用4. 免费代理的潜在风险5. 免费代理网站 二、付费代理1. 找付费代理服务站点2. 生成获取代理的api接口3. python获取代理请求接口示例数据返回示例 4. 解决请求速率5. 品易代理使用注意事项代理添…

Javaweb之Mybatis入门程序的详细解析

1.2 入门程序实现 1.2.1 准备工作 1.2.1.1 创建springboot工程 创建springboot工程&#xff0c;并导入 mybatis的起步依赖、mysql的驱动包。 项目工程创建完成后&#xff0c;自动在pom.xml文件中&#xff0c;导入Mybatis依赖和MySQL驱动依赖 <!-- 仅供参考&#xff1a;只…

Vue3+ElementPlus: 给点击按钮添加触发提示

一、需求 在Vue3项目中&#xff0c;有一个下载按钮&#xff0c;当鼠标悬浮在按钮上面时&#xff0c;会出现文字提示用户可以点击按钮进行数据的下载技术栈 Vue3 ElementPlusTooltip组件 ElementPlus中的Tooltip组件 &#xff0c;可用于展示鼠标 hover 时的提示信息 二、实现…

App.vue中引入自定义组件

components目录中定义组件&#xff1a;Person.vue 目录截图&#xff1a; Person.vue文件中内容&#xff1a; <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年龄&#xff1a;{{age}}</h2><!--定义了…

期权二叉树估值与图计算

传统期权二叉树的算法都是基于数组的&#xff0c;对于没有编程基础的人来说非常不直观。二叉树是一种特殊的图&#xff0c;可以用python networkx这个图算法库实现&#xff0c;这个库不仅包含常用的图算法&#xff0c;还包含简单的绘图功能&#xff0c;非常适合研究分析使用。 …

Java-反射

一、什么是反射&#xff1f; 反射允许对封装类的成员变量&#xff0c;成员方法和构造方法的信息进行编程访问。 反射可以把成员变量、成员方法、构造方法挨个儿的都获取出来&#xff0c;并对它们进行操作。 IDEA中自动提示的功能就是用反射来做的。 Ctrlp&#xff1a;快捷键&…

Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题

Java项目调试实战&#xff1a;如何高效调试Spring Boot项目中的GET请求&#xff0c;并通过equalsIgnoreCase解决大小写不一致问题 写在最前面全部过程Java equalsIgnoreCase() 方法idea中如何调试SpringBoot项目在IntelliJ IDEA中使用内置HTTP客户端设置断点和调试 补充&#x…

vu3-14

第一个需求是在用户登录成功之后&#xff0c;在主页显示用户的真实姓名和性别&#xff0c;这些信息要调用后端API获取数据库里面的信息&#xff0c;第二个需求是点击菜单1&#xff0c;在表单中修改用户信息之后&#xff0c;更新到后端数据库&#xff0c;然后在主页同步更新用户…

FA模板制作

1、链接克隆模板的制作 &#xff08;1&#xff09;安装一个全新的Windows 10&#xff0c;挂载并安装tools&#xff0c;关闭防火墙 &#xff08;2&#xff09;挂载FusionAccess_WindowsDestop_Install_6.5.1.iso后启用本地Administrator本地超管&#xff0c;切换为本地超管&am…

spring、springmvc、springboot、springcloud简介

spring简介 spring是什么&#xff1f; spring: 春天spring: 轻量级的控制反转和面向切面编程的框架 历史 2002年&#xff0c;首次推出spring雏形&#xff0c;interface 21框架2004年&#xff0c;发布1.0版本Rod Johnson: 创始人&#xff0c;悉尼大学&#xff0c;音乐学博士…

Nexus私服简介及搭建(Linux3.62版本)

文章目录 一、Nexus的安装1、运行程序2、查看运行日志和初始密码3、启动配置文件的修改 二、Nexus的使用1、Nexus使用流程说明2、库类型说明2.1、maven-public库配置说明2.2、maven-central库配置说明 3、用户本地配置使用maven-public库3.1、禁用了匿名访问&#xff0c;额外需…

test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 wiremock WireMock是一个流行的开源工具&#xf…

DFA 算法实现敏感词过滤

背景 项目中APP端发帖&#xff0c;评论可能包含多个关键词&#xff0c;铭感词。此时需要对该内容进行过滤处理。此前都是在客户端层面操作&#xff0c;这样不仅带来了性能的损耗&#xff0c;而且新增铭感词时&#xff0c;需要客户端重新打包上架&#xff0c;显得十分不合理。所…

R306指纹识别模块指令系统

一&#xff1a;指令集 1. GR_GetImage 指令代码&#xff1a;01H 功能&#xff1a;从传感器上读入图像存于图像缓冲区 2. GR_GenChar 指令代码&#xff1a;02H 功能&#xff1a;根据原始图像生成指纹特征存于 CharBuffer1 或 CharBuffer2 3. GR_Match 指令代码&#xff…

SpringCloud(H版alibaba)框架开发教程,使用eureka,zookeeper,consul,nacos做注册中心——附源码(1)

源码地址&#xff1a;https://gitee.com/jackXUYY/springboot-example 创建订单服务&#xff0c;支付服务&#xff0c;公共api服务&#xff08;共用的实体&#xff09;&#xff0c;eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.…