当前位置: 首页 > news >正文

【GoLang入门教程】Go语言几种标准库介绍(八)

ChatGPT 和文心一言哪个更好用?

文章目录

    • ChatGPT 和文心一言哪个更好用?
      • 强烈推荐
      • 前言
      • 几种库
        • runtime库 ( 运行时接口)
          • 常用的函数:
          • 示例
        • sort库(排序接口)
          • 主要的函数和接口:
          • 示例
        • strings库(字符串转换、解析及实用函数)
          • 常用的函数:
          • 示例
        • time库(时间接口)
          • 常用的函数:
          • 示例
        • text库(文本模板及 Token 词法器)
          • 1.`text/template` 包:
          • 示例
          • 2.**`text/scanner` 包:**
          • 示例
      • 总结
      • 专栏集锦
      • 强烈推荐
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


前言

上一篇,我们介绍了plugin、reflect、regexp三个库,这篇我们继续介绍剩下的库


几种库

runtime库 ( 运行时接口)

在 Go 语言的标准库中,runtime 包提供了与 Go 运行时系统交互的功能。

这个包包括了一些控制和查询运行时状态的函数,如协程控制、垃圾回收、程序退出等。

常用的函数:
  1. Gosched 函数: 让出处理器给其他 goroutine 执行,以便调度器能够有效地分配时间给不同的 goroutine。
  2. Go 函数: 用于启动一个新的 goroutine。
  3. NumCPU 函数: 返回机器上的逻辑 CPU 核心数。
  4. NumGoroutine 函数: 返回当前程序中活跃的 goroutine 数量。
  5. GOMAXPROCS 函数: 用于设置或查询可同时执行的最大 CPU 核心数。
  6. MemStats 结构和 ReadMemStats 函数: 提供了对内存使用情况的统计信息。
示例
package mainimport ("fmt""runtime""sync"
)func main() {// 设置最大同时执行的 CPU 核心数runtime.GOMAXPROCS(2)// 获取机器上的逻辑 CPU 核心数numCPU := runtime.NumCPU()fmt.Println("Number of CPUs:", numCPU)// 启动多个 goroutinevar wg sync.WaitGroupfor i := 0; i < 5; i++ {wg.Add(1)go func(index int) {defer wg.Done()fmt.Printf("Goroutine %d is running on CPU %d\n", index, runtime.NumCPU())}(i)}wg.Wait()// 获取当前程序中活跃的 goroutine 数量numGoroutines := runtime.NumGoroutine()fmt.Println("Number of Goroutines:", numGoroutines)// 让出处理器给其他 goroutine 执行runtime.Gosched()// 输出内存统计信息var memStats runtime.MemStatsruntime.ReadMemStats(&memStats)fmt.Printf("Allocated memory: %d bytes\n", memStats.Alloc)fmt.Printf("Total memory allocated: %d bytes\n", memStats.TotalAlloc)fmt.Printf("Heap memory allocated: %d bytes\n", memStats.HeapAlloc)
}

在这个示例中,使用了 runtime.GOMAXPROCS 设置最大同时执行的 CPU 核心数,使用 runtime.NumCPU 获取机器上的逻辑 CPU 核心数,使用 runtime.NumGoroutine 获取当前程序中活跃的 goroutine 数量。

还启动了多个 goroutine 并使用 runtime.Gosched 让出处理器给其他 goroutine 执行。最后,使用 runtime.ReadMemStats 输出内存统计信息。

sort库(排序接口)

在 Go 语言的标准库中,sort 包提供了对切片和用户定义的集合进行排序的功能。

它支持排序各种类型的数据,包括内置的基本数据类型以及用户定义的类型。

主要的函数和接口:
  1. sort.Interface 接口: 用户定义的类型需要实现这个接口的三个方法(LenLessSwap)来支持排序。这样的类型可以被 sort 包的函数直接使用。
  2. sort.Sort 函数: 对实现了 sort.Interface 接口的类型进行原地排序。
  3. sort.Slice 函数: 对切片进行排序,可以接受切片、比较函数和附加参数。
  4. sort.Search 函数: 在有序切片中查找一个元素,并返回它的索引。如果找不到,返回应该插入的位置。
示例
package mainimport ("fmt""sort"
)// 定义一个结构体类型
type Person struct {Name stringAge  int
}// 定义一个实现 sort.Interface 接口的切片类型
type People []Personfunc (p People) Len() int           { return len(p) }
func (p People) Less(i, j int) bool { return p[i].Age < p[j].Age }
func (p People) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }func main() {// 基本数据类型的切片排序intSlice := []int{5, 2, 7, 1, 8, 3}sort.Ints(intSlice)fmt.Println("Sorted Ints:", intSlice)// 自定义类型的切片排序people := People{{"Alice", 25},{"Bob", 30},{"Charlie", 22},}sort.Sort(people)fmt.Println("Sorted People:", people)// 使用 sort.Slice 对切片进行排序strSlice := []string{"banana", "apple", "orange", "grape"}sort.Slice(strSlice, func(i, j int) bool {return len(strSlice[i]) < len(strSlice[j])})fmt.Println("Sorted Strings by Length:", strSlice)// 使用 sort.Search 在有序切片中查找元素searchSlice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}index := sort.Search(len(searchSlice), func(i int) bool {return searchSlice[i] >= 6})fmt.Println("Index of 6 in Sorted Slice:", index)
}

在这个示例中,使用了 sort.Intssort.Sort 对切片进行排序。

同时,定义了一个 Person 结构体和一个实现了 sort.Interface 接口的 People 类型,然后使用 sort.Sort 对自定义类型的切片进行排序。

最后,使用 sort.Slice 对字符串切片进行排序,并使用 sort.Search 在有序切片中查找元素。

这些函数和接口提供了灵活而强大的排序功能,适用于各种排序需求。

strings库(字符串转换、解析及实用函数)

在 Go 语言的标准库中,strings 包提供了对字符串进行操作的各种函数。

这些函数包括字符串的拼接、切割、替换、搜索等,提供了丰富的字符串处理功能。

常用的函数:
  1. Contains 函数: 判断字符串是否包含子串。
  2. Count 函数: 统计子串在字符串中出现的次数。
  3. HasPrefixHasSuffix 函数: 判断字符串是否以指定的前缀或后缀开始或结束。
  4. IndexLastIndex 函数: 返回子串在字符串中第一次和最后一次出现的位置。
  5. Join 函数: 将字符串切片连接成一个字符串,中间用指定的分隔符分隔。
  6. Replace 函数: 替换字符串中的指定子串。
  7. Split 函数: 将字符串切割成字符串切片,根据指定的分隔符。
  8. ToLowerToUpper 函数: 将字符串转换为小写或大写。
示例
package mainimport ("fmt""strings"
)func main() {// Contains函数:判断字符串是否包含子串fmt.Println(strings.Contains("Hello, Gophers!", "Go")) // true// Count函数:统计子串在字符串中出现的次数fmt.Println(strings.Count("banana", "a")) // 3// HasPrefix和HasSuffix函数:判断字符串是否以指定的前缀或后缀开始或结束fmt.Println(strings.HasPrefix("Gopher", "Go")) // truefmt.Println(strings.HasSuffix("Gopher", "per")) // true// Index和LastIndex函数:返回子串在字符串中第一次和最后一次出现的位置fmt.Println(strings.Index("Hello, Gophers!", "Gophers"))    // 7fmt.Println(strings.LastIndex("Hello, Gophers!", "o"))       // 10// Join函数:将字符串切片连接成一个字符串,中间用指定的分隔符分隔strSlice := []string{"apple", "banana", "orange"}joinedString := strings.Join(strSlice, ", ")fmt.Println(joinedString) // apple, banana, orange// Replace函数:替换字符串中的指定子串replacedString := strings.Replace("Hello, Gophers!", "Gophers", "World", -1)fmt.Println(replacedString) // Hello, World!// Split函数:将字符串切割成字符串切片,根据指定的分隔符splitString := strings.Split("apple,banana,orange", ",")fmt.Println(splitString) // [apple banana orange]// ToLower和ToUpper函数:将字符串转换为小写或大写lowerString := strings.ToLower("GoLang")upperString := strings.ToUpper("GoLang")fmt.Println(lowerString, upperString) // golang GOLANG
}

这些函数提供了丰富的字符串处理功能,可以满足各种字符串操作的需求。

time库(时间接口)

在 Go 语言的标准库中,time 包提供了对时间的处理和操作功能。

time 包主要包含了表示时间的结构体、时间的格式化和解析、定时器等相关的功能。

常用的函数:
  1. Time 类型: 表示一个具体的时间点。Time 类型的值可以通过 time.Now() 获取当前时间,也可以通过 time.Parse 解析字符串得到。
  2. Duration 类型: 表示时间间隔,用于表示两个 Time 值之间的差异。
  3. time.Now 函数: 获取当前时间。
  4. time.Aftertime.Sleep 函数: 用于等待一段时间。
  5. time.Parsetime.Format 函数: 用于时间格式的解析和格式化。
  6. time.Timertime.Ticker 类型: 分别表示定时器和周期性的定时器。
示例
package mainimport ("fmt""time"
)func main() {// 获取当前时间now := time.Now()fmt.Println("Current Time:", now)// 格式化时间fmt.Println("Formatted Time:", now.Format("2006-01-02 15:04:05"))// 解析时间字符串parsedTime, err := time.Parse("2006-01-02", "2023-01-01")if err != nil {fmt.Println("Error parsing time:", err)return}fmt.Println("Parsed Time:", parsedTime)// 时间间隔(Duration)duration := 3 * time.Secondfmt.Println("Duration:", duration)// 等待一段时间time.Sleep(2 * time.Second)fmt.Println("After Sleep")// 定时器timer := time.NewTimer(1 * time.Second)<-timer.Cfmt.Println("Timer expired")// 周期性定时器ticker := time.NewTicker(500 * time.Millisecond)for i := 0; i < 5; i++ {<-ticker.Cfmt.Println("Ticker Tick", i+1)}ticker.Stop()fmt.Println("Ticker stopped")
}

在这个示例中,使用 time.Now 获取当前时间,使用 Format 格式化时间,使用 time.Parse 解析时间字符串,使用 time.Sleep 等待一段时间,使用 time.NewTimer 创建定时器,使用 time.NewTicker 创建周期性的定时器等。

text库(文本模板及 Token 词法器)

在 Go 语言的标准库中,“text” 包并不存在。

只有一些与文本处理相关的包,比如 text/templatetext/scanner

1.text/template 包:

提供了一种简单的模板引擎,用于生成文本输出。它允许在模板中嵌入变量和控制结构,然后通过传入数据来生成最终的文本输出。

示例
package mainimport ("os""text/template"
)func main() {// 定义模板tpl := "Hello, {{.Name}}! Today is {{.Day}}."// 创建模板对象t := template.Must(template.New("greeting").Parse(tpl))// 准备数据data := map[string]interface{}{"Name": "Gopher","Day":  "Wednesday",}// 渲染模板t.Execute(os.Stdout, data)
}
2.text/scanner 包:

提供了一个用于扫描文本的基本扫描器。这个包可用于将文本分割成令牌(Token)并对其进行处理。

示例
package mainimport ("fmt""strings""text/scanner"
)func main() {// 创建扫描器var s scanner.Scanners.Init(strings.NewReader("Hello, World!"))// 扫描并打印令牌for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() {fmt.Printf("Token: %s\n", s.TokenText())}
}

总结

这里我们介绍了5个库runtime、sort、strings、time、text ,至此,所有的标准库都已经介绍完了


专栏集锦

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

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

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


写在最后

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

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

csdn-end

相关文章:

【GoLang入门教程】Go语言几种标准库介绍(八)

ChatGPT 和文心一言哪个更好用&#xff1f; 文章目录 ChatGPT 和文心一言哪个更好用&#xff1f;强烈推荐前言几种库runtime库 ( 运行时接口)常用的函数&#xff1a;示例 sort库&#xff08;排序接口&#xff09;主要的函数和接口&#xff1a;示例 strings库(字符串转换、解析及…...

[系统安全] 五十四.恶意软件分析 (6)PE文件解析及利用Python获取样本时间戳

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…...

kafka入门(九):副本

副本 副本&#xff08;Replica&#xff09;&#xff0c;指的是分布式系统对数据和服务提供的一种冗余方式。 Kafka通过多副本机制实现故障自动转移&#xff0c;在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。 kafka 副本之间是 一主多从的关系。 其中 leader 副…...

【5G 接口协议】N2接口协议NGAP(NG Application Protocol)介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块二

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…...

Python自动化我选DrissionPage,弃用Selenium

DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器&#xff0c;也能收发数据包&#xff0c;还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大&#xff0c;内置无数人性化设计和便捷功能。 它的语法简洁而优雅&#x…...

MQ 消息丢失、重复、积压问题,如何解决?

面试官在面试候选人时&#xff0c;如果发现候选人的简历中写了在项目中使用了 MQ 技术&#xff08;如 Kafka、RabbitMQ、RocketMQ&#xff09;&#xff0c;基本都会抛出一个问题&#xff1a;在使用 MQ 的时候&#xff0c;怎么确保消息 100% 不丢失&#xff1f; 这个问题在实际…...

【Linux】第三十三站:日志

文章目录 一、实现一个简单的日志1.简介2.可变参数3.错误等级4.时间5.打印每一条参数6.与前面的一些代码搭配使用 二、完整代码 一、实现一个简单的日志 1.简介 我们运行代码的时候&#xff0c;我们希望有各种各样的运行时候的一些信息。这也就是日志 它一半有日志时间&…...

MVC和MVVM区别和VUE关系

MVC&#xff08;Model-View-Controller&#xff09;和 MVVM&#xff08;Model-View-ViewModel&#xff09;是两种常见的前端架构模式&#xff0c;它们的主要区别在于处理业务逻辑和数据操作的方式。 MVC中&#xff0c;View&#xff08;视图&#xff09;可以直接访问Model&…...

vue3自定义按钮点击变颜色实现(多选功能)

实现效果图&#xff1a; 默认选中第一个按钮&#xff0c;未选中按钮为粉色&#xff0c;点击时颜色变为红色 利用动态类名&#xff0c;当定义isChange数值和下标index相同时&#xff0c;赋予act类名&#xff0c;实现变色效果 <template><div class"page"&…...

Redis的key过期策略是怎么实现的

这是一道经典的Redis面试题&#xff0c;一个Redis中可能存在很多很多的key&#xff0c;这些key中可能有很大一部分都有过期时间&#xff0c;此时Redis服务器咋知道哪些key已经过期&#xff0c;哪些还没过期呢&#xff1f; 如果直接遍历所有的key&#xff0c;这显然是行不通的&…...

vue+elenemt分页+springboot

目录 1、编写模板 2、发请求调接口 3、后端返回数据 1.编写实体类 2、UserController 3、Userservice接口 4、&#xff08;mapper接口&#xff09;UserMapper 5、xml 1、编写模板 <!-- 搜素框 --><el-input placeholder"请输入姓名" v-model"ke…...

C++ :命名空间域

目录 冲突与命名&#xff1a; 举个例子&#xff1a; 全局与局部&#xff1a; 域作用限定符&#xff1a; 命名空间域&#xff1a; 冲突与命名&#xff1a; 在C语言中&#xff0c;我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库&#xff0c;在程序中使用的大多数…...

提升网站关键词排名的工具

随着互联网的蓬勃发展&#xff0c;网站的关键词排名成为衡量网站流量和曝光度的重要指标。在这个竞争激烈的数字时代&#xff0c;站在搜索引擎结果的前列变得至关重要。为了实现这一目标&#xff0c;合理利用关键词排名优化工具是必不可少的。本文将重点介绍147SEO软件&#xf…...

ICMP控制消息 汇总

控制消息由 类型 字段中的值标识。代码 字段给出了消息的附加上下文信息。自协议首次引入以来&#xff0c;一些控制消息已被弃用。 重要的ICMP Control Message控制信息 类型码状态描述0 –回声回复&#xff1a;140回声回复&#xff08;用于ping&#xff09;1和2未分配已预留3 …...

C#,入门教程(22)——函数的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(21)——命名空间&#xff08;namespace&#xff09;与程序结构的基础知识https://blog.csdn.net/beijinghorn/article/details/124140653 一、函数的基本概念 一个软件的结构大体如下&#xff1a; 大厦application: a plaza { --…...

已经30了,5年多,只会功能测试的怎么办?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这两天一直在和网易的朋友聊软件测试的发展&#xff0c;这一行的…...

什么是UML?有什么用?

2、什么是UML?有什么用&#xff1f; UML 是 Unified Model Language的缩写&#xff0c;中文是统一建模语言&#xff0c;是由一整套图表组成的标准化建模语言。 UML 是一种统一建模语言&#xff0c;一种图标式语言&#xff08;画图的&#xff09; UML 不是只有 Java 中使用&…...

盘点好用内容合规监测工具

网页敏感内容监测 Web Purify 由 WebPurify 提供&#xff0c;这是一个专门从事内容审核和过滤服务的公司。 核心功能 ● 文本审核&#xff1a;加强脏话过滤&#xff0c;标记仇恨言论、偏执、性挑逗等 ● 图片审核&#xff1a;让个人资料照片、社交应用程序、产品定制远离令…...

CC工具箱使用指南:【查找锐角】

一、简介 在面要素中&#xff0c;尖锐角往往是有问题的地方。 在一系列空间分析后&#xff0c;通常会遗留下来部分尖锐角&#xff0c;需要手动处理。 但是人工去找出这些尖锐角又比较麻烦&#xff0c;这个工具的目的就是找出面要素边界的尖锐角。 二、工具参数介绍 右键点击…...

kafka消费相关问题(GPT回答版本)

kafka消费相关问题&#xff08;GPT回答版本&#xff09; 在Java中&#xff0c;要避免重复消费Kafka消息&#xff0c;可以使用以下方法 1. 使用消费者组&#xff1a; 在设置Kafka消费者时&#xff0c;可以指定一个消费者组。一个消费者组中可以有多个消费者实例&#xff0c;每…...

【C++】string的基本使用二

我们接着上一篇的迭代器说起&#xff0c;迭代器不只有正向的&#xff0c;还有反向的&#xff0c;就是我们下边的这两个 它的迭代器类型也是不同的 rbegin就是末尾&#xff0c;rend就是开头&#xff0c;这样我们想遍历一个string对象的话就可以这样做 int main() {string s1(…...

MATLAB解决考研数学一题型(上)

闲来无事&#xff0c;情感问题和考研结束后的戒断反应比较严重&#xff0c;最近没有什么写博文的动力&#xff0c;抽空来整理一下考研初试前一直想做的工作——整理一下MATLAB解决数学一各题型的命令~ 本贴的目录遵循同济版的高数目录~ 目录 一.函数与极限 1.计算双侧极限 2…...

Vue以弹窗形式实现导入功能

目录 前言正文 前言 由于个人工作原因&#xff0c;偏全栈&#xff0c;对于前端的总结还有些初出茅庐&#xff0c;后续会进行规整化的总结 对应的前端框架由&#xff1a;【vue】avue-crud表单属性配置&#xff08;表格以及列&#xff09; 最终实现的表单样式如下&#xff1a;…...

分布式锁原理及实现

目录 一、锁的使用场景 二、如何实现控制&#xff1f; 三、单台服务器使用锁的场景 四、分布式锁 五、Redis 实现分布式锁及存在问题 六、Redisson 实现分布式锁 七、定时任务&#xff0b;锁 一、锁的使用场景 1. 控制定时任务执行 定时任务多次执行浪费资源&#xff…...

蓝桥杯官网填空题(海盗与金币)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 12名海盗在一个小岛上发现了大量的金币&#xff0c;后统计一共有将近5万枚。 登上小岛是在夜里&#xff0c;天气又不好。由于各种原因&#xff0c;有的海盗偷拿了很…...

JavaScript 中JSON 字符串和对象之间的转换。

JSON.stringify() 方法&#xff08;对象转换为 JSON 字符串&#xff09; 用于将 JavaScript 对象转换为 JSON 字符串。 它接受一个 JavaScript 对象作为参数&#xff0c;并返回对应的 JSON 字符串表示。例如&#xff1a; const obj { name: John, age: 25 }; const jsonStr…...

All the stories begin at installation

Before installation, there are some key points about Conan: “Conan is a dependency and package manager for C and C languages.”“With full binary management, Conan can create and reuse any number of different binaries (for different configurations like a…...

Linux文件系统与设备文件

Linux文件系统与设备文件 文章目录 Linux文件系统与设备文件Linux文件操作文件操作系统调用C库文件操作 Linux文件系统Linux文件系统目录结构Linux文件系统与设备驱动file结构体inode结构体file结构体和inode结构体的区别 devfsudev用户空间设备管理sysfs文件系统与Linux设备模…...

QT的绘图系统QPainterDevice与文件系统QIODevice

QT的绘图系统&#xff08;QPainterDevice&#xff09;与文件系统&#xff08;QIODevice&#xff09; 文章目录 1、Qt 的绘图系统1、QPainter的使用2、QPen(画笔&#xff09;及QBursh&#xff08;画刷&#xff09;3、手动更新窗口4、绘图设备1、四种绘图设备的 区别2、 QBitmap3…...