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

news2024/9/27 5:55:13

你见过哪些令你膛目结舌的代码技巧?

文章目录

    • 你见过哪些令你膛目结舌的代码技巧?
      • 前言
      • 几种库
        • bufio(带缓冲的 I/O 操作)
          • 特性
          • 示例
        • bytes (实现字节操作)
          • 特性
          • 示例
      • 总结
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

前言

随着计算机科学的迅猛发展,编程语言也在不断涌现。

在这个多样化的编程语言生态系统中,Go语言凭借其简洁、高效、并发支持等特性逐渐崭露头角。

作为一门开源的静态编程语言,Go语言自带了丰富的标准库,为开发者提供了强大的工具和功能。

本文将深入介绍Go语言几种标准库,帮助读者更好地了解和利用这些库,提高编程效率。


几种库

bufio(带缓冲的 I/O 操作)

在Go语言的标准库中,bufio(buffered I/O)库提供了带缓冲区的输入输出功能,用于提高读写效率。

它通过在输入输出流上添加缓冲区,减少了频繁的系统调用,从而提高了程序的性能。

bufio库常用于文件读写、网络通信等场景。

特性
  1. 缓冲区操作: 提供了Buffered ReaderBuffered Writer,分别用于读取和写入缓冲区。
  2. 行读取: 支持按行读取文件,方便处理文本数据。
  3. 字节读取: 可以方便地按字节读取数据,提供了ReadByte等方法。
  4. 自定义缓冲区大小: 允许用户自定义缓冲区的大小,以满足不同场景的需求。
示例
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	// 创建一个字符串作为示例输入
	input := "Hello\nGolang\nbufio\n"

	// 创建一个字符串读取器,使用字符串作为输入源
	reader := bufio.NewReader(strings.NewReader(input))

	fmt.Println("=== 使用bufio.Reader按行读取 ===")

	// 使用ReadString按行读取数据
	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			break
		}
		fmt.Print(line)
	}

	fmt.Println("\n=== 使用bufio.Scanner按行读取 ===")

	// 重新创建一个字符串读取器
	reader = bufio.NewReader(strings.NewReader(input))

	// 使用Scanner按行读取数据
	scanner := bufio.NewScanner(reader)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println("Error:", err)
	}

	fmt.Println("=== 使用bufio.Writer写入数据 ===")

	// 创建一个字符串写入器
	writer := bufio.NewWriter(os.Stdout)

	// 使用Writer写入数据
	_, err := writer.WriteString("Hello, bufio!\n")
	if err != nil {
		fmt.Println("Error writing:", err)
	}

	// 将缓冲区的数据刷入底层Writer
	writer.Flush()
}

在这个示例中,创建了一个包含多行文本的字符串,并使用bufio.Readerbufio.Scanner按行读取数据。

然后,使用bufio.Writer将一行文本写入标准输出。请注意,Flush方法用于将缓冲区的数据刷入底层的io.Writer

通过bufio库,能够以高效的方式处理输入输出,提高程序性能,特别是在处理大量数据时。

bytes (实现字节操作)

在Go语言的标准库中,bytes库提供了对字节切片([]byte)的操作,包括拼接、切割、搜索等。

这个库通常用于对二进制数据的处理,提供了一系列的函数和方法,使得字节切片的操作更加方便和高效。

bytes库是很多其他标准库和第三方库的基础,如在网络编程、文件操作等场景中经常使用。

特性
  1. 字节切片的拼接和分割: 提供了JoinSplit等方法,用于合并和分割字节切片。
  2. 字节切片的搜索和替换: 提供了ContainsIndexLastIndex等方法,用于搜索和替换字节切片中的内容。
  3. 字节切片的比较: 提供了Equal方法,用于比较两个字节切片是否相等。
  4. 字节切片的转换: 提供了ToStringToBytes等方法,用于字节切片与字符串之间的相互转换。
示例
package main

import (
	"bytes"
	"fmt"
)

func main() {
	// 示例1:字节切片的拼接和分割
	slice1 := []byte("Hello, ")
	slice2 := []byte("world!")

	// 使用Join方法将两个字节切片拼接
	result := bytes.Join([][]byte{slice1, slice2}, []byte(" "))
	fmt.Println("拼接后的结果:", string(result))

	// 使用Split方法将字节切片分割
	parts := bytes.Split(result, []byte(","))
	fmt.Println("分割后的结果:", parts)

	// 示例2:字节切片的搜索和替换
	content := []byte("This is a simple example.")
	keyword := []byte("simple")

	// 使用Contains方法检查关键字是否存在
	fmt.Println("关键字是否存在:", bytes.Contains(content, keyword))

	// 使用Index方法找到关键字的位置
	index := bytes.Index(content, keyword)
	fmt.Println("关键字位置:", index)

	// 使用Replace方法替换关键字
	newContent := bytes.Replace(content, keyword, []byte("easy"), -1)
	fmt.Println("替换后的结果:", string(newContent))

	// 示例3:字节切片的比较
	slice3 := []byte("abcd")
	slice4 := []byte("abcd")

	// 使用Equal方法比较两个字节切片是否相等
	fmt.Println("字节切片是否相等:", bytes.Equal(slice3, slice4))

	// 示例4:字节切片的转换
	str := "Go is powerful!"
	strBytes := []byte(str)

	// 将字节切片转换为字符串
	strResult := bytes.ToString(strBytes)
	fmt.Println("字节切片转换为字符串:", strResult)

	// 将字符串转换为字节切片
	bytesResult := bytes.ToBytes(str)
	fmt.Println("字符串转换为字节切片:", bytesResult)
}

在这个示例中,我们展示了bytes库中一些常用的方法,包括拼接、分割、搜索、替换、比较以及字节切片与字符串之间的转换。


总结

这里我们介绍了2个库bufio和bytes,下一篇我们将介绍其他的几种标准库


专栏集锦

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

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等系列文章,一系列干货随时送达!

如果有商务合作或者交流,可联系V:fengyelin8866

csdn-end

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

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

相关文章

复试情报准备

英语自我介绍,介绍完老师会根据你的回答用英语问你问题,比如介绍一下你的本科学校,或者家乡什么的。计网过一遍,会问两道题。接下来是重点,我当时是根据我成绩单,问了我本科学过的科目,比如pyth…

【Docker容器精解篇 】深入探索Docker技术的概念与容器思想

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《docker容器精解篇》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、Docker 的介绍1.1 Docker 的由来1.1.1 环境不一致1.1.2 隔离性1.1.3 弹性伸缩1.1.4 学习成本 1.2 Doc…

推荐五个免费的网络安全工具

导读: 在一个完美的世界里,信息安全从业人员有无限的安全预算去做排除故障和修复安全漏洞的工作。但是,正如你将要学到的那样,你不需要无限的预算取得到高质量的产品。这里有SearchSecurity.com网站专家Michael Cobb推荐的五个免费…

网站检测有哪些好用的监测工具

目前网站监测工具良莠不齐,网站监控工具有很多,选择合适功能强大的网站监控工具,对我们的业务安全有非常大的帮助。目前市场上好用的一些网站监测工具如德迅云眼、观测云等,它们都提供了网站性能监测、安全防护、故障预警等功能&a…

天呐,我找到财务报表开发的通关密码了!

要问我们IT最不愿做的报表开发有哪些,首当其冲的一定是财务分析。我对开发财务报表这事就一个态度:只要不谈开发财务报表,我们就还是好朋友,谈了会怎样?不好意思,我会破大防。 1、财务的分析逻辑和需求&am…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理…

加速计算,为何会成为 AI 时代的计算力“新宠”

随着科技的发展,处理大量数据和进行复杂计算的需求越来越高,人工智能、大数据和物联网等领域更是如此,传统的计算方式已经无法满足这些需求。因此,加速计算作为一种现代计算方式,成了必要的手段。加速计算具有前所未有…

项目应用多级缓存示例

前不久做的一个项目,需要在前端实时展示硬件设备的数据。设备很多,并且每个设备的数据也很多,总之就是数据很多。同时,设备的刷新频率很快,需要每2秒读取一遍数据。 问题来了,我们如何读取数据&#xff0c…

AutoBookmark Adobe Acrobat快速自动批量添加书签/目录

前言 解决问题:Adobe Acrobat快速自动批量添加书签/目录, 彻底告别手动添加书签的烦恼 AutoBookmark 前言1 功能简介2 实现步骤2.1 下载插件2.2 将插件复制到Acrobat文件夹下2.3 自动生成书签 1 功能简介 我们在查看PDF版本的论文或者其他文件的时候, 虽然相比较于…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

goland错误:该版本的1%与您运行的windows版本不兼容

创建第一个go语言的hello world后,报错。 需要将 package gotest1 改为 package main main是主程序的入口

【leetcode100-020】【矩阵】旋转图像

【题干】 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 【思路】 怎么还整上小学奥数题了(不是对角翻转水平/垂…

第11章 GUI Page436 使用缓冲DC, wxBufferedPaintDC

所谓“缓冲DC”,是指将所有图元都先划到一个人眼看不到的“设备上下文”之上,最后再一次性复制到真正的屏幕DC之上,这样我们就看不到中间画的过程了,也就不会感到闪烁了。 注意,这时不能解除ScrolledWindow1的背景擦除…

代码签名的功能实现原理

代码签名是一种用来确保软件或程序来源和完整性的技术,它通过对程序文件进行数字签名和验证来保证软件未被篡改过。下面我将为您介绍代码签名的功能实现原理。 1. 数字证书颁发机构(CA): 代码签名的实现依赖于权威的数字证书颁发…

JS 现代化的深克隆

前端手写深拷贝/深克隆是一道回头率超高的笔试题,但笔试版一般不适用于生产环境,JSON 的奇技淫巧和 Lodash 的工具函数也各有缺点。 您知道吗,JS 现在有一种原生方法可以深层复制对象? structuredClone 函数内置在 JS 运行时中&a…

极智芯 | 解读最新全球半导体设计厂商排名 英伟达一骑绝尘 中国韦尔半导体上榜

欢迎关注我,获取我的更多技术分享 大家好,我是极智视界,本文分享一下 最新全球芯片设计厂商排名 英伟达一骑绝尘 中国韦尔半导体上榜。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 最近,TrendForc…

C# 主要语言区域

C# 教程 - 主要语言区域 - C# | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/features 目录 数组、集合和 LINQ 数组 字符串内插 模式匹配 委托和 Lambda 表达式 async/await 属性 数组、集合和 LINQ C# 和 .NET 提供了许多不同的…

I Doc View在线文档预览系统 cmd.json RCE漏洞复现

0x01 产品简介 IDocView是一个在线文档解析应用,旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 I Doc View在线文档预览系统 cmd.json 接口处存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 影…

(1)(1.11) SiK Radio v2(一)

文章目录 前言 1 概述 2 特点 3 状态LED灯 前言 SiK 遥测无线电是在自动驾驶仪和地面站之间建立遥测连接的最简单方法之一。本文提供了如何连接和配置无线电的基本用户指南。 3DR Radio v2(SiKRadio 的消费者版本) !Note 本页面以前的…

使用travelbook架设自己的实时位置共享服务

travelbook 是一款开源的安卓APP,它能以低功耗提供实时位置共享,它包含功能如下: 好友之间分享实时位置;记录行程轨迹;标记收藏地点; 这款软件的主要解决的问题包括: 场景1:查看老…