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

news2025/1/12 3:56:27

文章目录

      • 前言
      • 几种库
        • Net库 (网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等)
          • 重要的子包和功能:
          • 示例
        • OS库(操作系统平台不依赖平台操作封装)
          • 主要功能:
          • 示例
        • path库(兼容各操作系统的路径操作实用函数)
          • 常用函数:
          • 示例
      • 总结
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

前言

上一篇,我们介绍了image、IO、math三个库,这篇我们继续介绍剩下的库


几种库

Net库 (网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等)

在 Go 语言的标准库中,net 包提供了对网络操作的支持,包括基本的网络协议、Socket 编程、HTTP 客户端和服务器等。

net 包包含多个子包,其中一些主要的子包包括 net/httpnet/urlnet/rpc 等。

重要的子包和功能:
  1. net/http 提供了用于构建 HTTP 客户端和服务器的功能,包括处理请求和响应、创建路由、设置中间件等。
  2. net/url 用于解析和构建 URL,提供了对 URL 中各个部分的访问方法。
  3. net/rpc 实现了远程过程调用(RPC)的基本功能,用于构建分布式系统。
  4. net 提供了一些基础的网络操作,如 Dial 用于建立网络连接,Listen 用于监听网络端口。
示例
package main

import (
	"fmt"
	"net/http"
)

func main() {
	// 设置路由
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprint(w, "Hello, Go HTTP Server!")
	})

	// 启动服务器,监听在 8080 端口
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		fmt.Println("Error starting server:", err)
	}
}

在这个示例中,使用 http.HandleFunc 设置了一个简单的路由,该路由处理根路径 (“/”) 的 HTTP 请求,并返回一个简单的文本响应。然后,使用 http.ListenAndServe 启动了一个 HTTP 服务器,监听在 8080 端口。当访问 http://localhost:8080/ 时,将会看到服务器返回的文本内容。

OS库(操作系统平台不依赖平台操作封装)

在 Go 语言的标准库中,os 包提供了与操作系统交互的功能,包括文件和目录操作、环境变量、程序退出等。os 包中的函数和类型允许你执行许多与操作系统相关的任务。

主要功能:
  1. 文件和目录操作:
    • Create:创建文件。
    • Open:打开文件。
    • Mkdir:创建目录。
    • Remove:删除文件或目录。
    • Rename:重命名文件或目录。
  2. 环境变量:
    • Getenv:获取环境变量的值。
    • Setenv:设置环境变量的值。
    • Environ:获取所有环境变量的键值对。
  3. 程序退出:
    • Exit:终止程序运行。
  4. 标准输入输出:
    • Stdin:标准输入。
    • Stdout:标准输出。
    • Stderr:标准错误输出。
示例
package main

import (
	"fmt"
	"os"
)

func main() {
	// 创建文件并写入内容
	file, err := os.Create("example.txt")
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	content := []byte("Hello, Go File!")
	_, err = file.Write(content)
	if err != nil {
		fmt.Println("Error writing to file:", err)
		return
	}

	fmt.Println("File created and written successfully.")

	// 打开文件并读取内容
	openedFile, err := os.Open("example.txt")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer openedFile.Close()

	readContent := make([]byte, 100)
	_, err = openedFile.Read(readContent)
	if err != nil {
		fmt.Println("Error reading from file:", err)
		return
	}

	fmt.Printf("Read from file: %s\n", readContent)

	// 创建目录
	err = os.Mkdir("example_dir", 0755)
	if err != nil {
		fmt.Println("Error creating directory:", err)
		return
	}

	fmt.Println("Directory created successfully.")

	// 重命名文件
	err = os.Rename("example.txt", "renamed_example.txt")
	if err != nil {
		fmt.Println("Error renaming file:", err)
		return
	}

	fmt.Println("File renamed successfully.")
}

在这个示例中,使用 os.Create 创建一个文件,然后使用 file.Write 写入内容。

接着,使用 os.Open 打开这个文件,使用 openedFile.Read 读取内容。

之后,使用 os.Mkdir 创建一个目录,并使用 os.Rename 重命名文件。

path库(兼容各操作系统的路径操作实用函数)

在 Go 语言的标准库中,path 包(实际上是 path/filepath 包)提供了用于处理文件路径的函数。

这个包的目的是使路径处理在不同操作系统上都能保持一致性,即使操作系统的路径分隔符不同。

常用函数:
  1. Join 将多个路径元素连接成一个路径。该函数会根据操作系统自动选择正确的路径分隔符。
  2. Base 返回路径的最后一个元素。
  3. Dir 返回路径除去最后一个元素的部分。
  4. Clean 清理路径,解析路径中的 “…”、“.” 等元素。
  5. IsAbs 判断路径是否是绝对路径。
  6. Rel 返回基准路径到目标路径的相对路径。
示例
package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	// Join函数:连接路径
	joinedPath := filepath.Join("dir", "subdir", "file.txt")
	fmt.Println("Joined Path:", joinedPath)

	// Base函数:获取路径的最后一个元素
	base := filepath.Base("/path/to/file.txt")
	fmt.Println("Base:", base)

	// Dir函数:获取路径除去最后一个元素的部分
	dir := filepath.Dir("/path/to/file.txt")
	fmt.Println("Dir:", dir)

	// Clean函数:清理路径
	cleanPath := filepath.Clean("/path/to/../file.txt")
	fmt.Println("Cleaned Path:", cleanPath)

	// IsAbs函数:判断路径是否是绝对路径
	isAbs := filepath.IsAbs("/path/to/file.txt")
	fmt.Println("Is Absolute Path:", isAbs)

	// Rel函数:获取基准路径到目标路径的相对路径
	relativePath, err := filepath.Rel("/path/to", "/path/to/file.txt")
	if err != nil {
		fmt.Println("Error getting relative path:", err)
	} else {
		fmt.Println("Relative Path:", relativePath)
	}
}

在这个示例中,使用了 path/filepath 包的一些函数,展示了路径连接、获取最后一个元素、获取路径部分、清理路径、判断是否是绝对路径以及获取相对路径等操作。

这些函数使得在不同操作系统上处理文件路径变得更加简便。


总结

这里我们介绍了3个库Net、OS、path3个库, 下一篇我们将介绍其他的几种标准库


专栏集锦

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

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

csdn-end

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

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

相关文章

中英双语8K向量大模型新鲜出炉,企业出海必备!

自从我们的 Embeddings V2 获得各界好评后,今日,我们推出了全新的中英双语文本向量大模型:jina-embeddings-v2-base-zh。此模型不仅继承了 V2 的全部优势,能够处理长达八千词元的文本,更能流畅应对中英文双语内容&…

Spring MVC 的RequestMapping注解

RequestMapping注解 使用说明 作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以…

(详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

Haoran Wei1∗, Lingyu Kong2∗, Jinyue Chen2, Liang Zhao1, Zheng Ge1†, Jinrong Yang3, Jianjian Sun1, Chunrui Han1, Xiangyu Zhang1 1MEGVII Technology 2University of Chinese Academy of Sciences 3Huazhong University of Science and Technology arXiv 2023.12.11 …

C语言初始化效率问题以及关键字解释

一、初始化效率 1、在静态变量的初始化中,我们可以把可执行程序文件想要初始化的值放在当程序执行时变量将会使用的位置。当可执行文件载入到内存时,这个已经保存了正确初始值的位置将赋值给那个变量,完成这个任务并不需要额外的时间&#xf…

Android 10.0 TvSettings系统设置wifi连接密码框点击Enter键失去焦点

1.前言 在10.0的box产品开发中,在TvSettings中,在wifi连接的时候,在用遥控器输入wifi密码框的时候,会发现在按遥控器Enter键的时候, 发现EditText焦点失去了,导致输入法消失了,为了解决这个问题就需要拦截Enter键保证正常输入wifi密码,接下来就来实现这个功能 如图: 2.…

lvs+keepalived+nginx双主模式双主热备实现负载均衡

目录 一、原理 二、真实服务器nginx配置 三、lvs的keepalived配置 3.1 配置文件 3.2 开启keepalived服务 四、测试 4.1 测试访问VIP 4.2 模拟lvs01宕机 主机名IPnginx0111.0.1.31nginx0111.0.1.31lvs0111.0.1.33lvs0211.0.1.34VIP111.0.1.29VIP211.0.1.30 一、原理 lvskeepal…

解决JuPyter500:Internal Server Error问题

目录 一、问题描述 二、问题原因 三、解决方法 四、参考文章 一、问题描述 在启动Anaconda Prompt后,通过cd到项目文件夹启动Jupyter NoteBook点击.ipynb文件发生500报错。 二、问题原因 base环境下输入指令: jupyter --version 发现jupyter环境…

k8s部署mongodb-sharded7.X集群(多副本集)

#mongodb-sharded 7.X版本CHART NAME: mongodb-sharded CHART VERSION: 7.0.5 APP VERSION: 7.0.2helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/bitnami/mongodb-sharded --untar默认副本数较多。我修改为33 搜索关键字replicaCount 修改 最后…

064:vue中一维数组的全选、全不选、反选(图文示例)

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏: 随便写一个宏名后点创建&#xff1…

Triumphcore FPGA调测试记录

FPGA采用Xilinx pynq Z2开发板。基于V2.5版本开发 OverView uart端口映射 BUG调试记录 2024.1.7 复位状态导致取指时序错误 错误波形: 正确波形 问题代码: 2024.1.9 clock_wizard设置输入时钟是输出时钟的2^n倍,输出时钟的占空比才…

实战(CVE-2023-42442)JumpServer未授权访问漏洞

声明: 该文章仅供网络安全领域的学习使用,请勿利用文章内的相关技术从事任何非法行为。 知攻善防,遇强则强。 开发和安全缺一不可! 目录 一、知识介绍 1、堡垒机(跳板机) 2、Jumpserver 二、漏洞介绍 三…

本地远程实时获取无人机采集视频图像(天空端 + jetson nano + 检测分割 + 回传地面端显示)

1、无线图传设备介绍 2、jetson nano天空端数据采集检测保存 3、本地回传显示 1、无线图传设备介绍 由于本设计考虑将无人机得到检测结果实时回传给地面站显示,因此需要考虑一个远程无线通信设备进行传输。本设计采用思翼HM30图传设备。通过无线图传的wifi将天空端…

Linux——firewalld防火墙(二)

一、firewalld高级配置 1、IP地址伪装 地址伪装(masquerade):通过地址伪装,NAT设备将经过设备的包转发到指定接收方,同时将通过的数据包的源地址更改为其自己的接口地址。当返回的数据包到达时,会将目的地址修改为原始主机的地址…

HDFS相关API操作

文章目录 API文档环境配置API操作准备工作创建文件夹文件上传文件下载文件删除文件的更名和移动获取文件详细信息 API文档 HDFS API官方文档:https://hadoop.apache.org/docs/r3.3.1/api/index.html 环境配置 将Hadoop的Jar包解压到非中文路径(例如D:…

阿里云实时计算企业级状态存储引擎 Gemini 技术解读

本文整理自阿里云 Flink 存储引擎团队李晋忠,兰兆千,梅源关于阿里云实时计算企业级状态存储引擎 Gemini 的研究,内容主要分为以下五部分: 流计算状态访问的痛点企业级状态存储引擎GeminiGemini 性能评测&线上表现结语参考 一、…

手机直连卫星及NTN简介

一、手机直连卫星的发展现状 近日,华为推出了支持北斗卫星短报文的Mate 50旗舰机、P60系列,苹果也跟Globalstar(全球星)合作推出了支持卫星求救的iPhone14,最亮眼的还是华为的。这几款产品揭开了卫星通信探索消费领域…

JAVA基础学习笔记-day16-网络编程

JAVA基础学习笔记-day16-网络编程 1. 网络编程概述1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议 3. 谈…

点割集、边割集

点割集:对图G来说删去点割集的真子集,依旧连通。也就是说,点割集是删去使得图从连通变成非连通的最小节点的集合。 边割集:对图G来说删去边割集的真子集,依旧连通。也就是说,点割集是删去使得图从连通变成…

【小白专用】C# 连接 MySQL 数据库

C# – Mysql 数据库连接 1. 配置环境 #前提:电脑已安装Mysql服务; Visual Studio 安装Mysql依赖库: 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索, 安装Mysql.Data (Oracle); (安装成功后&…