【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 main

import (
	_ "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 main

import (
	"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 Person
	err = 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 main

import (
	"flag"
	"fmt"
)

func main() {
	// 定义命令行标志
	var name string
	var age int
	var married bool

	flag.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0085:甘肃省白银市平川区4.9级地震震中位置图件制作

据中国地震台网正式测定,12月31日22时27分在甘肃白银市平川区发生4.9级地震,震源深度10公里,震中位于北纬36.74度,东经105.00度。 文章目录 一、白银市行政区划图1. 县级行政区2. 乡镇行政区二、4.9级地震图件制作1. 震中位置2. 影像图3. 震中三维地形一、白银市行政区划图…

【JavaFX】基于JavaFX11 构建可编辑、对象存储、修改立即保存、支持条件过滤的TableView

文章目录 效果设计思路二、使用步骤1. 创建实体类2.读取本地文件数据3. 定义表格TableView总结效果 如图所示,这是一个存储application.properties内容的表格。这里的文件application.properties是从Linux服务器上获取来的。 当点击检索按钮,并输入条件匹配字符时,TableVie…

初识SpringBoot(2023最后一篇文章)

初识SpringBoot 1、SpringBoot概述 Spring是什么&#xff1f; Spring是一个于2003 年兴起的一个轻量级开源Java开发框架&#xff0c;由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;使…

「微服务」微服务架构中的数据一致性

在微服务中&#xff0c;一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案&#xff0c;如果其中一个分布式流程参与者出现故障&#xff0c;我们就会面临数据不一致的风险 - 例如在未下订单的情…

Linux-------rm命令超详解(狠狠爱住)

目录 rm 命令用于在Linux系统中删除指定的文件或目录 基本语法&#xff1a; 常用选项&#xff1a; 示例用法&#xff1a; 放在文末的话&#xff1a; 补充&#xff1a; rm 命令用于在Linux系统中删除指定的文件或目录 基本语法&#xff1a; rm [选项] 文件名/目录名 常用…

一个有趣的MOSFET电路-触摸调光电路

来源 刷B站视频&#xff0c;看到一个很新奇的“触摸调光电路”&#xff0c;电路图如下&#xff1a; 视频在这里&#xff0c;只使用了3个元件。 刚好最近在学模拟电路的 MOSFET&#xff0c;我之前的理解是 MOSFET 的控制电压应该加在 Gate 和 Source 之间&#xff0c;也就是 栅…

【算法】运用滑动窗口方法解决算法题(C++)

文章目录 1. 滑动窗口 介绍2. 滑动窗口算法引入209.长度最小的子数组 3. 使用滑动窗口解决算法题3.无重复字符的最长子串1004.最大连续1的个数III1658.将x减到0的最小操作数904.水果成篮LCR015.找到字符串中所有字母异位词30.串联所有单词的子串76.最小覆盖子串 1. 滑动窗口 介…

6个火爆全网的AI开源项目,用上月10万+

标题月10万可能说的有点夸张和含糊&#xff0c;10万具体指的是你可以利用这些开源项目实现&#xff1a; 访问量10万 收入10万 用户10万 …… 开源项目只是免费的工具&#xff0c;具体怎么实现还需要你根据自己需求去深入运营。这里只是给你推荐一些比较热门的开源项目&…

搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日&#xff0c;亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数据分析引擎&#xff…

MyBatis多表映射

1. 多表映射概念 MyBatis 思想是&#xff1a;数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式&#xff0c;可惜它们并不都是那样。 如果能有一种数据库映射模式&#xff0c;完美适配所有的应用程序查询需求&#xff0c;那就太…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3数据结构中的二叉树&#xff1a; 2.4特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2.51 顺序存储&#xff1a; 2.5.2 链式存储&…

【快速全面掌握 WAMPServer】09.如何在 WAMPServer 中安装 Composer

网管小贾 / sysadm.cc WAMPServer 的大名想必应该有不少人特别是新手小白们略有耳闻吧。 它是出自法国大神之手的一款 PHP 开发环境集成包&#xff0c;工作于 Windows 环境&#xff0c;类似于它这样的集成包在 Linux 平台上反正我是没找到&#xff0c;所以它应该算是对使用 Wi…

sparkstreamnig实时处理入门

1.2 SparkStreaming实时处理入门 1.2.1 工程创建 导入maven依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.2</version> </dependency> <dependency…

【MySQL表的增删查改】

文章目录 前言1 Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩 ( &…

CocoaPods安装及‘__rvm_make -j8‘处理

CocoaPods是一个用Ruby写的、负责管理iOS项目中第三方开源库的工具&#xff0c;CocoaPods能让我们集中的、统一管理第三方开源库&#xff0c;为我们节省设置和更新第三方开源库的时间。 安装步骤 1.查看ruby版本 ruby -v 2.通过rvm来安装或升级Ruby&#xff0c;依次执行 cu…

Apache OFBiz RCE漏洞复现(CVE-2023-51467)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。 0x02 漏洞概述 漏洞成因 该系统的身份验证机制存在缺陷,可能允许未授权用户通过绕过标准登录流程来获取后台访问权限。此外,在…

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…

使用Pycharm给html文件添加浏览器

1、选择菜单栏的File---->选择setting设置 2、选择Tools(工具)---> Web Browser(web 浏览器) 勾选 自己想要添加的浏览器前面 的勾选框即可 注意点击ok进行保存

《数据结构、算法与应用C++语言描述》- 平衡搜索树 -全网唯一完整详细实现插入和删除操作的模板类

平衡搜索树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_34Balanced search tree 概述 本章会讲AVL、红-黑树、分裂树、B-树。 平衡搜索树的应用&#xff1f; AVL 和红-黑树和分裂树适合内部存储的应用。 B-树适合外部存储的…

github使用技巧(经验篇)

相关经验 指定代码范围并高亮显示 例如&#xff0c;指定nn_ops.py文件2612-L2686行的代码&#xff1a;https://github.com/tensorflow/tensorflow/blob/v2.14.0/tensorflow/python/ops/nn_ops.py#L2612-L2686 FAQ Q&#xff1a;github网页打不开&#xff1f; 【github加载不…