当前位置: 首页 > news >正文

【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 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.Readerbufio.Scanner按行读取数据。

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

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

bytes (实现字节操作)

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

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

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

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

csdn-end

相关文章:

【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()函数都会将它们连接成一个简单的向量。因此&#xff…...

算法通关村-番外篇排序算法

大家好我是苏麟 , 今天带来番外篇 . 冒泡排序 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…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

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* …...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...