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

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

文章目录

    • 你见过哪些令你膛目结舌的代码技巧?
      • 前言
      • 几种库
        • 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

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

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

相关文章

前端---vscode 的基本使用

1. vscode 的基本介绍 全拼是 Visual Studio Code (简称 VS Code) 是由微软研发的一款免费、开源的跨平台代码编辑器,目前是前端(网页)开发使用最多的一款软件开发工具。 2. vscode 的安装 下载网址: Download Visual Studio Code - Mac, Linux, Windows选择对应…

(企业 / 公司项目)如何使用分布式任务调度框架Quartz集成 和 SpringBoot自带的定时任务集成?

SpringBoot自带的定时任务 首先在你的微服务项目中创建一个新的模块,定时调度模块 pom.xml里面关联公共模块common的依赖其他不需要改变 然后启动类别删,启动项目是否报错,写一个简单的测试类访问路径是否成功 package com.jiawa.train.bat…

C语言:字符串字面量及其保存位置

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 虽然C语言中不存在字符串类型,但依然可以通过数组或指针的方式保存字符串,但字符串字面量却没有想象的这么简单,本文就将对此进行讨论…

【Linux】僵尸与孤儿 进程等待

目录 一,僵尸进程 1,僵尸进程 2,僵尸进程的危害 二,孤儿进程 1,孤儿进程 三,进程等待 1,进程等待的必要性 2,wait 方法 3,waitpid 方法 4,回收小结…

华为OD机试 - 学生方阵 - 矩阵(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出 四、解题思路1、题目解析2、解体思路 五、Java算法源码再重新读一遍题目,看看能否优化一下~ 六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导…

阶段十-物业项目

可能遇到的错误&#xff1a; 解决jdk17javax.xml.bind.DatatypeConverter错误 <!--解决jdk17javax.xml.bind.DatatypeConverter错误--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>…

使用 fixture 机制重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

IntelliJ IDEA插件

插件安装目录&#xff1a;C:\Users\<username>\AppData\Roaming\JetBrains\IntelliJIdea2021.2\plugins aiXcoder Code Completer&#xff1a;代码补全 Bookmark-X&#xff1a;书签分类 使用方法&#xff1a;鼠标移动到某一行&#xff0c;按ALT SHIFT D

机器学习之实验过程01

import pandas as pd import numpy as np import matplotlib.pyplot as plt data_path /home/py/Work/labs/data/SD.csv # 请确保您的数据文件路径是正确的 df pd.read_csv(data_path) df.head() # 创建散点图 # 创建散点图 plt.figure(figsize(10, 6)) plt.scatter…

C语言字符串处理提取时间(ffmpeg返回的时间字符串)

【1】需求 需求&#xff1a;有一个 “00:01:33.90” 这样格式的时间字符串&#xff0c;需要将这个字符串的时间值提取打印出来&#xff08;提取时、分、秒、毫秒&#xff09;。 这个时间字符串从哪里来的&#xff1f; 是ffmpeg返回的时间&#xff0c;也就是视频的总时间。 下…

Go_defer详解

defer 1. 前言 defer语句用于延迟函数的调用&#xff0c;每次defer都会把一个函数压入栈中&#xff0c;函数返回前再把延迟的函数取出并执行。 为了方便描述&#xff0c;我们把创建defer的函数称为主函数&#xff0c;defer语句后面的函数称为延迟函数。 延迟函数可能有输入…

零基础入门网络安全必看的5本书籍(附PDF)

书中自有黄金屋&#xff0c;书中自有颜如玉。很多人学习一门技术都会看大量的书籍&#xff0c;经常也有朋友询问&#xff1a;零基础刚入门&#xff0c;应该看哪些书&#xff1f;应该怎么学&#xff1f;等等问题。今天就整理了5本零基础入门网络安全必看书籍&#xff0c;希望能帮…

WebGL开发地理和地球科学应用

使用WebGL开发地理和地球科学应用可以为学生提供交互式、沉浸式的学习体验&#xff0c;帮助他们理解地球表面的地理特征、地球科学原理以及环境变化。以下是开发地理和地球科学应用的一般步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外…

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知&#xff0c;微信小程序每个页面由.json&#xff0c;.scss&#xff0c;.ts&#xff0c;.wxml这四个文件组成。 有的小伙伴会发现&#xff0c;需要给页面加背景色的时候&#xff0c;只需在此页面的.scss文件中写个page{background-colo…

Java设计模式-桥接模式

目录 一、手机操作问题 二、传统方法 三、基本介绍 四、原理类图 五、使用桥接模式解决手机问题 一、手机操作问题 现在对不同手机类型的不同品牌实现操作编程( 比如 : 开机、关机、上网&#xff0c;打电话等) &#xff0c; 如图: 二、传统方法 传统方案解决手机操作问题分…

2024如果创业适合干什么,普通人如何创业

五行学说是中国古代哲学中的一部分&#xff0c;将世界万物归纳为五种元素&#xff0c;分别是金、木、水、火和土。每个年份的五行组合不同&#xff0c;代表着特定的能量和属性。2024年什么生意好做。 一&#xff0c;物联网科技行业&#xff1a;庚子年的金属性与现代物联网科技的…

【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(夯实功底篇)

手把手零基础带你玩转单元测试&#xff0c;让你的代码更加“强壮” 前言介绍JUnit是什么&#xff1f;JUnit和xUnit之间的关系 JUnit的基本概念JUnit的特点什么是一个单元测试用例 JUnit的用法JUnit的最佳实践案例分析创建一个类创建 Test Case 类创建 Test Runner 类 JUnit总体…

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

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

千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路

千帆起航&#xff1a;探索百度千帆AppBuilder在AI原生应用开发中的革新之路 1.揭开帷幕&#xff0c;大模型第二次战役 自从 ChatGPT 横空出世后&#xff0c;一石激起千层浪&#xff0c;人工智能也正在从感知理解走向生成创造&#xff0c;这是一个关键里程碑。生成式大模型完成…

[x86汇编语言]从实模式到保护模式第二版

下载汇编器&#xff1a;https://www.nasm.us/pub/nasm/releasebuilds/2.16.02rc6/win64/ mov ax, 0x3f add bx,ax add cx,ax 编译&#xff1a; C:\Users\HP>cd D:\BaiduNetdiskDownload\01b站\lizhong\myasm C:\Users\HP>D: D:\BaiduNetdiskDownload\01b站\lizhong…