【GoLang入门教程】Go语言几种标准库介绍(八)
ChatGPT 和文心一言哪个更好用?
文章目录
- ChatGPT 和文心一言哪个更好用?
- 强烈推荐
- 前言
- 几种库
- runtime库 ( 运行时接口)
- 常用的函数:
- 示例
- sort库(排序接口)
- 主要的函数和接口:
- 示例
- strings库(字符串转换、解析及实用函数)
- 常用的函数:
- 示例
- time库(时间接口)
- 常用的函数:
- 示例
- text库(文本模板及 Token 词法器)
- 1.`text/template` 包:
- 示例
- 2.**`text/scanner` 包:**
- 示例
- 总结
- 专栏集锦
- 强烈推荐
- 写在最后
强烈推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

前言
上一篇,我们介绍了plugin、reflect、regexp三个库,这篇我们继续介绍剩下的库
几种库
runtime库 ( 运行时接口)
在 Go 语言的标准库中,runtime 包提供了与 Go 运行时系统交互的功能。
这个包包括了一些控制和查询运行时状态的函数,如协程控制、垃圾回收、程序退出等。
常用的函数:
Gosched函数: 让出处理器给其他 goroutine 执行,以便调度器能够有效地分配时间给不同的 goroutine。Go函数: 用于启动一个新的 goroutine。NumCPU函数: 返回机器上的逻辑 CPU 核心数。NumGoroutine函数: 返回当前程序中活跃的 goroutine 数量。GOMAXPROCS函数: 用于设置或查询可同时执行的最大 CPU 核心数。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 包提供了对切片和用户定义的集合进行排序的功能。
它支持排序各种类型的数据,包括内置的基本数据类型以及用户定义的类型。
主要的函数和接口:
sort.Interface接口: 用户定义的类型需要实现这个接口的三个方法(Len、Less、Swap)来支持排序。这样的类型可以被sort包的函数直接使用。sort.Sort函数: 对实现了sort.Interface接口的类型进行原地排序。sort.Slice函数: 对切片进行排序,可以接受切片、比较函数和附加参数。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.Ints 和 sort.Sort 对切片进行排序。
同时,定义了一个 Person 结构体和一个实现了 sort.Interface 接口的 People 类型,然后使用 sort.Sort 对自定义类型的切片进行排序。
最后,使用 sort.Slice 对字符串切片进行排序,并使用 sort.Search 在有序切片中查找元素。
这些函数和接口提供了灵活而强大的排序功能,适用于各种排序需求。
strings库(字符串转换、解析及实用函数)
在 Go 语言的标准库中,strings 包提供了对字符串进行操作的各种函数。
这些函数包括字符串的拼接、切割、替换、搜索等,提供了丰富的字符串处理功能。
常用的函数:
Contains函数: 判断字符串是否包含子串。Count函数: 统计子串在字符串中出现的次数。HasPrefix和HasSuffix函数: 判断字符串是否以指定的前缀或后缀开始或结束。Index和LastIndex函数: 返回子串在字符串中第一次和最后一次出现的位置。Join函数: 将字符串切片连接成一个字符串,中间用指定的分隔符分隔。Replace函数: 替换字符串中的指定子串。Split函数: 将字符串切割成字符串切片,根据指定的分隔符。ToLower和ToUpper函数: 将字符串转换为小写或大写。
示例
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 包主要包含了表示时间的结构体、时间的格式化和解析、定时器等相关的功能。
常用的函数:
Time类型: 表示一个具体的时间点。Time类型的值可以通过time.Now()获取当前时间,也可以通过time.Parse解析字符串得到。Duration类型: 表示时间间隔,用于表示两个Time值之间的差异。time.Now函数: 获取当前时间。time.After和time.Sleep函数: 用于等待一段时间。time.Parse和time.Format函数: 用于时间格式的解析和格式化。time.Timer和time.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/template 或 text/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
强烈推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

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

相关文章:
【GoLang入门教程】Go语言几种标准库介绍(八)
ChatGPT 和文心一言哪个更好用? 文章目录 ChatGPT 和文心一言哪个更好用?强烈推荐前言几种库runtime库 ( 运行时接口)常用的函数:示例 sort库(排序接口)主要的函数和接口:示例 strings库(字符串转换、解析及…...
[系统安全] 五十四.恶意软件分析 (6)PE文件解析及利用Python获取样本时间戳
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…...
kafka入门(九):副本
副本 副本(Replica),指的是分布式系统对数据和服务提供的一种冗余方式。 Kafka通过多副本机制实现故障自动转移,在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。 kafka 副本之间是 一主多从的关系。 其中 leader 副…...
【5G 接口协议】N2接口协议NGAP(NG Application Protocol)介绍
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块二
竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…...
Python自动化我选DrissionPage,弃用Selenium
DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器,也能收发数据包,还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大,内置无数人性化设计和便捷功能。 它的语法简洁而优雅&#x…...
MQ 消息丢失、重复、积压问题,如何解决?
面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失? 这个问题在实际…...
【Linux】第三十三站:日志
文章目录 一、实现一个简单的日志1.简介2.可变参数3.错误等级4.时间5.打印每一条参数6.与前面的一些代码搭配使用 二、完整代码 一、实现一个简单的日志 1.简介 我们运行代码的时候,我们希望有各种各样的运行时候的一些信息。这也就是日志 它一半有日志时间&…...
MVC和MVVM区别和VUE关系
MVC(Model-View-Controller)和 MVVM(Model-View-ViewModel)是两种常见的前端架构模式,它们的主要区别在于处理业务逻辑和数据操作的方式。 MVC中,View(视图)可以直接访问Model&…...
vue3自定义按钮点击变颜色实现(多选功能)
实现效果图: 默认选中第一个按钮,未选中按钮为粉色,点击时颜色变为红色 利用动态类名,当定义isChange数值和下标index相同时,赋予act类名,实现变色效果 <template><div class"page"&…...
Redis的key过期策略是怎么实现的
这是一道经典的Redis面试题,一个Redis中可能存在很多很多的key,这些key中可能有很大一部分都有过期时间,此时Redis服务器咋知道哪些key已经过期,哪些还没过期呢? 如果直接遍历所有的key,这显然是行不通的&…...
vue+elenemt分页+springboot
目录 1、编写模板 2、发请求调接口 3、后端返回数据 1.编写实体类 2、UserController 3、Userservice接口 4、(mapper接口)UserMapper 5、xml 1、编写模板 <!-- 搜素框 --><el-input placeholder"请输入姓名" v-model"ke…...
C++ :命名空间域
目录 冲突与命名: 举个例子: 全局与局部: 域作用限定符: 命名空间域: 冲突与命名: 在C语言中,我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库,在程序中使用的大多数…...
提升网站关键词排名的工具
随着互联网的蓬勃发展,网站的关键词排名成为衡量网站流量和曝光度的重要指标。在这个竞争激烈的数字时代,站在搜索引擎结果的前列变得至关重要。为了实现这一目标,合理利用关键词排名优化工具是必不可少的。本文将重点介绍147SEO软件…...
ICMP控制消息 汇总
控制消息由 类型 字段中的值标识。代码 字段给出了消息的附加上下文信息。自协议首次引入以来,一些控制消息已被弃用。 重要的ICMP Control Message控制信息 类型码状态描述0 –回声回复:140回声回复(用于ping)1和2未分配已预留3 …...
C#,入门教程(22)——函数的基础知识
上一篇: C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识https://blog.csdn.net/beijinghorn/article/details/124140653 一、函数的基本概念 一个软件的结构大体如下: 大厦application: a plaza { --…...
已经30了,5年多,只会功能测试的怎么办?
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 这两天一直在和网易的朋友聊软件测试的发展,这一行的…...
什么是UML?有什么用?
2、什么是UML?有什么用? UML 是 Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。 UML 是一种统一建模语言,一种图标式语言(画图的) UML 不是只有 Java 中使用&…...
盘点好用内容合规监测工具
网页敏感内容监测 Web Purify 由 WebPurify 提供,这是一个专门从事内容审核和过滤服务的公司。 核心功能 ● 文本审核:加强脏话过滤,标记仇恨言论、偏执、性挑逗等 ● 图片审核:让个人资料照片、社交应用程序、产品定制远离令…...
CC工具箱使用指南:【查找锐角】
一、简介 在面要素中,尖锐角往往是有问题的地方。 在一系列空间分析后,通常会遗留下来部分尖锐角,需要手动处理。 但是人工去找出这些尖锐角又比较麻烦,这个工具的目的就是找出面要素边界的尖锐角。 二、工具参数介绍 右键点击…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
