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

这篇具有很好参考价值的文章主要介绍了【GoLang入门教程】Go语言几种标准库介绍(八)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


【GoLang入门教程】Go语言几种标准库介绍(八),GO,golang,开发语言,后端

强烈推荐

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

【GoLang入门教程】Go语言几种标准库介绍(八),GO,golang,开发语言,后端


前言

上一篇,我们介绍了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 main

import (
	"fmt"
	"runtime"
	"sync"
)

func main() {
	// 设置最大同时执行的 CPU 核心数
	runtime.GOMAXPROCS(2)

	// 获取机器上的逻辑 CPU 核心数
	numCPU := runtime.NumCPU()
	fmt.Println("Number of CPUs:", numCPU)

	// 启动多个 goroutine
	var wg sync.WaitGroup
	for 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.MemStats
	runtime.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 main

import (
	"fmt"
	"sort"
)

// 定义一个结构体类型
type Person struct {
	Name string
	Age  int
}

// 定义一个实现 sort.Interface 接口的切片类型
type People []Person

func (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 main

import (
	"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")) // true
	fmt.Println(strings.HasSuffix("Gopher", "per")) // true

	// Index和LastIndex函数:返回子串在字符串中第一次和最后一次出现的位置
	fmt.Println(strings.Index("Hello, Gophers!", "Gophers"))    // 7
	fmt.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 main

import (
	"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.Second
	fmt.Println("Duration:", duration)

	// 等待一段时间
	time.Sleep(2 * time.Second)
	fmt.Println("After Sleep")

	// 定时器
	timer := time.NewTimer(1 * time.Second)
	<-timer.C
	fmt.Println("Timer expired")

	// 周期性定时器
	ticker := time.NewTicker(500 * time.Millisecond)
	for i := 0; i < 5; i++ {
		<-ticker.C
		fmt.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 main

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

import (
	"fmt"
	"strings"
	"text/scanner"
)

func main() {
	// 创建扫描器
	var s scanner.Scanner
	s.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

强烈推荐

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

【GoLang入门教程】Go语言几种标准库介绍(八),GO,golang,开发语言,后端


写在最后

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

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

【GoLang入门教程】Go语言几种标准库介绍(八),GO,golang,开发语言,后端文章来源地址https://www.toymoban.com/news/detail-803936.html

到了这里,关于【GoLang入门教程】Go语言几种标准库介绍(八)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Go语言】Golang保姆级入门教程 Go初学者介绍chapter1

    Golang的学习方向 区块链研发工程师: 去中心化 虚拟货币 金融 Go服务器端、游戏软件工程师 : C C++ 处理日志 数据打包 文件系统 数据处理 很厉害 处理大并发 Golang分布式、云计算软件工程师:盛大云 cdn 京东 消息推送 分布式文件系统 2、Golang的应用领域 区块链应用:区块链

    2024年02月15日
    浏览(69)
  • 【GoLang】Go语言几种标准库介绍(三)

    前言 上一篇,我们介绍了container、crypto、database三个库,这篇我们继续介绍剩下的库 几种库 debug 库 (各种调试文件格式访问及调试功能) 在 Go 语言的标准库中,并没有一个名为 debug 的独立库。 然而,Go 提供了一系列的工具和包,用于调试和性能分析。 这些工具和包包括 d

    2024年02月03日
    浏览(49)
  • 【GoLang】Go语言几种标准库介绍(一)

    前言 随着计算机科学的迅猛发展,编程语言也在不断涌现。 在这个多样化的编程语言生态系统中,Go语言凭借其简洁、高效、并发支持等特性逐渐崭露头角。 作为一门开源的静态编程语言,Go语言自带了丰富的标准库,为开发者提供了强大的工具和功能。 本文将深入介绍G

    2024年02月04日
    浏览(65)
  • 【GoLang】Go语言几种标准库介绍(二)

    前言 上一篇,我们介绍了 bufio (buffered I/O)库和 bytes 库 ,这篇我们继续介绍剩下的库 几种库 container 库 (封装堆、列表和环形列表等容器) container 包并不是一个独立的包,而是包含了一些子包,如 container/list 、 container/heap 等,用于实现不同类型的容器数据结构。这些数据

    2024年02月04日
    浏览(60)
  • 【GoLang入门教程】Go语言工程结构详述

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 前言 当创建一个Go语言项目时,良好的工程结构是确保项目可维护性、可扩展性和清晰性的关键。 虽然Go本身没有强制性的项目结构要求,但是采用一致性

    2024年01月24日
    浏览(80)
  • 【Golang入门教程】Go语言变量的初始化

    强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: 人工智能 推荐一个个人工作,日常中比较常用的人工智能工具,无需魔法,忍不住分享一下给大家。点击跳转到网站: 人工智能工具 引言 在Go语言中,变量

    2024年04月17日
    浏览(78)
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter2

    setting的首选项 一个程序就是一个世界 变量是程序的基本组成单位 变量的使用步骤 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zuxG8imp-1691479164956)(https://cdn.staticaly.com/gh/hudiework/img@main/image-20230726152905139.png)] 变量表示内存中的一个存储区 注意:

    2024年02月14日
    浏览(129)
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter3

    下划线“_”本身在Go中一个特殊的标识符,成为空标识符。可以代表任何其他的标识符,但是他对应的值就会被忽略 仅仅被作为站维度使用, 不能作为标识符使用 因为Go语言中没有private public 所以标记变量首字母大写代表其他包可以使用 小写就是不可使用的 注意:Go语言中

    2024年02月13日
    浏览(62)
  • go语言入门详细教程

    1.Hello World Go 是一门编译型语言,Go 语言的工具链将源代码及其依赖转换成计算机的机器指令(译注:静态编译)。Go 语言提供的工具都通过一个单独的命令 go 调用, go 命令有一系列子命令。最简单的一个子命令就是 run 。这个命令编译一个或多个以。 .go 结尾的源文件,链

    2024年02月04日
    浏览(80)
  • go入门实践三-go日志库-Logrus入门教程

    日志可以用于排查bug。在C++中,我尝试过:boost log简介、spdlog日志库的封装使用。但我还是比较喜欢plog,因为它简单。 Go 标准库提供了一个日志库log。它的使用可见:Go 每日一库之 log。但是,它有个致命的缺点,没有日志等级。它可以很好的用于日常写demo,但是不适合稍微

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包