【GoLang】Go语言几种标准库介绍(一)
你见过哪些令你膛目结舌的代码技巧?
文章目录
- 你见过哪些令你膛目结舌的代码技巧?
- 前言
- 几种库
- bufio(带缓冲的 I/O 操作)
- 特性
- 示例
- bytes (实现字节操作)
- 特性
- 示例
- 总结
- 专栏集锦
- 写在最后
前言
随着计算机科学的迅猛发展,编程语言也在不断涌现。
在这个多样化的编程语言生态系统中,Go语言凭借其简洁、高效、并发支持等特性逐渐崭露头角。
作为一门开源的静态编程语言,Go语言自带了丰富的标准库,为开发者提供了强大的工具和功能。
本文将深入介绍Go语言几种标准库,帮助读者更好地了解和利用这些库,提高编程效率。
几种库
bufio(带缓冲的 I/O 操作)
在Go语言的标准库中,bufio(buffered I/O)库提供了带缓冲区的输入输出功能,用于提高读写效率。
它通过在输入输出流上添加缓冲区,减少了频繁的系统调用,从而提高了程序的性能。
bufio库常用于文件读写、网络通信等场景。
特性
- 缓冲区操作: 提供了
Buffered Reader和Buffered Writer,分别用于读取和写入缓冲区。 - 行读取: 支持按行读取文件,方便处理文本数据。
- 字节读取: 可以方便地按字节读取数据,提供了
ReadByte等方法。 - 自定义缓冲区大小: 允许用户自定义缓冲区的大小,以满足不同场景的需求。
示例
package mainimport ("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)}// 将缓冲区的数据刷入底层Writerwriter.Flush()
}
在这个示例中,创建了一个包含多行文本的字符串,并使用bufio.Reader和bufio.Scanner按行读取数据。
然后,使用bufio.Writer将一行文本写入标准输出。请注意,Flush方法用于将缓冲区的数据刷入底层的io.Writer。
通过bufio库,能够以高效的方式处理输入输出,提高程序性能,特别是在处理大量数据时。
bytes (实现字节操作)
在Go语言的标准库中,bytes库提供了对字节切片([]byte)的操作,包括拼接、切割、搜索等。
这个库通常用于对二进制数据的处理,提供了一系列的函数和方法,使得字节切片的操作更加方便和高效。
bytes库是很多其他标准库和第三方库的基础,如在网络编程、文件操作等场景中经常使用。
特性
- 字节切片的拼接和分割: 提供了
Join和Split等方法,用于合并和分割字节切片。 - 字节切片的搜索和替换: 提供了
Contains、Index、LastIndex等方法,用于搜索和替换字节切片中的内容。 - 字节切片的比较: 提供了
Equal方法,用于比较两个字节切片是否相等。 - 字节切片的转换: 提供了
ToString和ToBytes等方法,用于字节切片与字符串之间的相互转换。
示例
package mainimport ("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

相关文章:
【GoLang】Go语言几种标准库介绍(一)
你见过哪些令你膛目结舌的代码技巧? 文章目录 你见过哪些令你膛目结舌的代码技巧?前言几种库bufio(带缓冲的 I/O 操作)特性示例 bytes (实现字节操作)特性示例 总结专栏集锦写在最后 前言 随着计算机科学的迅猛发展,编…...
短剧分销系统:月入百w的新模式
随着我国短剧的高速发展,越来越多的人进入到了短剧影视行业。本文旨在介绍短剧市场的发展前景以及短剧分销系统的设计和开发。 一、短剧发展背景 短剧具有时长短、剧情紧凑、节奏快、剧情新颖等特点,满足了国内观众的碎片化时间,在当下短视频…...
鞋服用户运营策略如何实现有效闭环?
实现长期价值和业务闭环是企业经营的关键。对于鞋服行业来说,如何基于客户旅程编排(Customer Journey Orchestration,简称 CJO)实现用户运营策略的有效闭环,提升长期价值呢? 本文围绕该主题,从鞋…...
简单工厂、工厂方法、抽象工厂和策略模式
摘要 本文简单介绍软件开发过程中面临的痛点和几个总体原则。详细介绍了简单工厂、工厂方法、抽象工厂和策略模式的实现,以及各种模式之间的相似、区别。 背景 开发面临哪些问题(痛点)? 相信做过大型软件开发的tx都遇到过以下类似…...
junit mocktio request打桩
Controller下request组装参数 HttpServletRequest request new MockHttpServletRequest(); ((MockHttpServletRequest) request).addHeader("router","login"); ((MockHttpServletRequest) request).addParameter("test","wwww"); …...
第十四节TypeScript 联合类型
1、简介 联合类型可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错的。 2、创建联合类型的语法格式: Type1|Type2|Type3 实例&a…...
[x86汇编语言]从实模式到保护模式第二版
下载汇编器:https://www.nasm.us/pub/nasm/releasebuilds/2.16.02rc6/win64/ mov ax, 0x3f add bx,ax add cx,ax 编译: C:\Users\HP>cd D:\BaiduNetdiskDownload\01b站\lizhong\myasm C:\Users\HP>D: D:\BaiduNetdiskDownload\01b站\lizhong…...
基本的逻辑门
前言 本篇文章介绍基本的逻辑门,然后给出C语言描述 逻辑门是在集成电路上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进…...
云原生系列3-Kubernetes
1、Kubernetes概述 k8s缩写是因为k和s之间有八个字符。k8s是基于容器技术的分布式架构方案。官网:https://kubernetes.io/zh-cn/ Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的…...
R-列表、矩阵、数组转化为向量
目录 一、c()函数 二、unlist()函数 一、c()函数 c():对应的英文是combine. 当你使用c()函数时,它会将输入的对象连接成一个向量。因此,无论输入是矩阵、数组还是列表,c()函数都会将它们连接成一个简单的向量。因此ÿ…...
算法通关村-番外篇排序算法
大家好我是苏麟 , 今天带来番外篇 . 冒泡排序 BubbleSort 最基本的排序算法,最常用的排序算法 . 我们以关键字序列{26,53,48,11,13,48,32,15}看一下排序过程: 动画演示 : 代码如下 : (基础版) class Solution {public int[] sortArray(int[] nums) {for(int i …...
三种方式简单搭建http本地文件服务
有时候想写一个简单的html文件,然后加上一些image、js、css文件用于测试。希望有一个简单的http服务,总结了如下三种方式,欢迎讨论更多高效的方式。 (一)使用Web Server for Chrome浏览器扩展 之前写过一篇博文&#x…...
设计模式--适配器模式
实验8:适配器模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解适配器模式的动机,掌握该模式的结构; 2、能够利用适配器模式解决实际问题。 [实验任务]:双向适配器 实现一个双向…...
Node.js教程-express框架
概述 Express是基于Node.js平台(建立在Node.js内置的http模块上),快速、开放、极简的Web开发框架。 中文官网 http://www.expressjs.com.cn/。 Github地址:https://github.com/orgs/expressjs。 Express核心特性: 可设置中间件来响应 HTTP…...
location.origin兼容
if (!window.location.origin) {window.location.origin window.location.protocol "//" window.location.hostname (window.location.port ? : window.location.port: );}...
spring boot集成mybatis和springsecurity实现权限控制功能
上一篇已经实现了登录认证功能,这一篇继续实现权限控制功能,文中代码只贴出来和上一篇不一样的修改的地方,完整代码可结合上一篇一起整理spring boot集成mybatis和springsecurity实现登录认证功能-CSDN博客 数据库建表 权限控制的意思就是根…...
按键修饰符
在键盘监听事件时,我们经常需要判断详细的按键,此时,可以为键盘相关的事件添加按键修饰符,例如: 键盘修饰符案例:...
新版IDEA中Git的使用(一)
说明:本文介绍如何在新版IDEA中使用Git 创建项目 首先,在GitLab里面创建一个项目(git_demo),克隆到桌面上。 然后在IDEA中创建一个项目,项目路径放在这个Git文件夹里面。 Git界面 当前分支&Commit …...
【性能测试】真实企业,性能测试流程总结分析(一)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试什么时候…...
20231224解决outcommit_id.xml1 parser error Document is empty的问题
20231224解决outcommit_id.xml1 parser error Document is empty的问题 2023/12/24 18:13 在开发RK3399的Android10的时候,出现:rootrootrootroot-X99-Turbo:~/3TB/Rockchip_Android10.0_SDK_Release$ make installclean PLATFORM_VERSION_CODENAMEREL…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
