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

文章目录

      • 前言
      • 几种库
        • 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 mainimport ("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 mainimport ("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 mainimport ("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.hqwc.cn/news/338901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 地理空间搜索 - 远超 OpenSearch

作者:来自 Elastic Nathan_Reese 2021 年,OpenSearch 和 OpenSearch Dashboards 开始作为 Elasticsearch 和 Kibana 的分支。 尽管 OpenSearch 和 OpenSearch Dashboards 具有相似的血统,但它们不提供相同的功能。 在分叉时,只能克…

【ArcGIS微课1000例】0087:经纬度格式转换(度分秒转度、度转度分秒)

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换。例如:度分秒→度 度分秒: 度: 二、工具介绍 转换坐标记法:将一个或两个字段包含的坐标记法从一…

uniapp项目怎么删除顶部导航栏

uniapp去掉顶部导航的方法: 1、去掉所有导航栏 "globalStyle": { "navigationBarTextStyle": "white", "navigationBarTitleText": "uni-app", "navigationBarBackgroundColor": "#007AFF"…

Digital Audio (HDMI)未插入 用Hdmi连接电脑 显示高清数字音频未插入 win10电脑没声音,喇叭上一个叉❌

先说结论,出现这些问题的原因: 未插入音频设备或者硬件问题(10%)设置错误,未使用显示器音频 (30%)音频驱动不兼容或者没有驱动(50%)其他驱动有问题 (10%&…

OpenCV——多分辨率LBP的计算方法

目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述 基本LBP算子虽然在早期…

TensorFlow相关组件的安装

安装Anaconda3 安装Anaconda3的时候可以安装在任意磁盘中,在勾选path的时候全部勾选即可。更换Anaconda3的下载源为清华大学源,在此期间不要打开Anaconda3,在cmd中依次输入以下即可: conda config --add channels https://mirro…

Vue3 子传父 暴露数据 defineExpose

defineExpose 属性:用于将子组件中的数据和方法,暴露给父组件,父组件再配合 ref 属性使用。 语法格式 // 子组件:暴露数据和方法 defineExpose({ 数据, 数据, 方法 });// 父组件:使用数据和方法 ref名称.value.数据 …

2024.1.11每日一题

LeetCode 2645.构造有效字符串的最少插入数 2645. 构造有效字符串的最少插入数 - 力扣(LeetCode) 题目描述 给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字…

进程、线程、协程的对比、区别和联系,进程之间的通信方式、线程之间的通信方式、协程之间的通信方式

前言 之前的一篇文章曾写过一些关于进程、线程、协程的内容——进程、线程、协程… … ——任务管理器的性能里都有什么?那么多的线程,进程、线程、句柄都是什么? 但对其之间的通信方式还是没有太过详细了解,因此特写此&#xf…

【LeetCode每日一题】2645. 构造有效字符串的最少插入数(计算组数+动态规划+考虑相邻字母)

2024-1-11 文章目录 [2645. 构造有效字符串的最少插入数](https://leetcode.cn/problems/minimum-additions-to-make-valid-string/)方法一:计算组数方法二:动态规划方法三: 考虑相邻字母 2645. 构造有效字符串的最少插入数 方法一:计算组数 …

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读写几段式状态机? 设计实战两种state的FSM(异步复位) 理论解读 写几段式状态机? 设计实战 两种state的FSM(异步复位) 实现下图所示的摩尔状态机,复位为异步复位。 代码实现&am…

多无人机编队飞行

matlab2020可运行 GitHub - Zhao-Jichao/Distributed_optimal_-formation_control_of_heterogeneous_multi-agent_systems_with_mixed-orders: 异构混合阶多智能体系统编队控制的分布式优化