15分钟学 Go 第 22 天:包的使用
第22天:包的使用
欢迎来到Go语言的第22天!今天,我们将深入探讨如何创建和使用包。通过学习包的使用,你将能够更好组织你的代码,提高复用性和可维护性。
1. 包的概念
在Go语言中,包是代码的基本组织单位。一个包可以包含一个或多个源文件,这些源文件可以共享变量、函数和类型。包的使用原则使得代码能够模块化,更易于管理。
1.1 为什么使用包?
- 代码复用:相同的代码可以在多个项目中复用,减少代码重复。
- 组织结构:将代码分成不同的包,使得项目结构清晰。
- 可维护性:小而专注的包更易于维护和测试。
1.2 Go的标准库
Go语言的标准库提供了许多内置包,如 fmt、os、http 等。它们为我们提供了常用的功能,可以节省大量开发时间。
2. 创建包
2.1 创建目录结构
首先,我们需要创建一个新的包。假设我们要创建一个数学包来处理一些数学运算。
目录结构如下:
/go-math├── go.mod├── main.go└── math├── add.go└── multiply.go
2.2 编写包代码
go.mod 文件
在项目根目录下,使用以下命令初始化一个Go模块:
go mod init go-math
添加功能
math/add.go
package math// Add 返回两个整数的和
func Add(a, b int) int {return a + b
}
math/multiply.go
package math// Multiply 返回两个整数的乘积
func Multiply(a, b int) int {return a * b
}
2.3 使用包
main.go
package mainimport ("fmt""go-math/math" // 导入自定义包
)func main() {sum := math.Add(3, 5)product := math.Multiply(4, 6)fmt.Println("Sum:", sum)fmt.Println("Product:", product)
}
3. 代码运行流程
下面是代码的运行流程图,帮助理解包的创建和使用过程。
+---------------------+
| main.go |
+---------------------+
| import math |
+---------------------+|v
+---------------------+
| add.go |
| Multiply function |
+---------------------+|v
+---------------------+
| multiply.go |
| Add function |
+---------------------+
4. 运行你的程序
在项目根目录下运行以下命令:
go run main.go
您应该会看到以下输出:
Sum: 8
Product: 24
5. 包的导入和别名
在Go中,导入包时可以使用别名以避免冲突,尤其是需要导入同名包的时候。
5.1 如何使用别名
在main.go中,我们可以为导入的包指定一个别名:
import (m "go-math/math"
)func main() {sum := m.Add(3, 5)product := m.Multiply(4, 6)fmt.Println("Sum:", sum)fmt.Println("Product:", product)
}
这里,我们将 math 包的别名设置为 m,便于代码简洁。
6. 导入未使用的包
请注意,在Go中,如果导入的包没有被使用,编译器会报错。为了避免此问题,我们可以用下划线 _ 来导入包而不使用它:
import _ "package-name" // 只导入不使用
7. 包的文档
Go 提供了很好用的文档工具,可以用来生成包的文档。只需使用以下命令:
go doc math
这将展示 math 包的详细信息和所有导出函数。
8. 常见问题
8.1 如何处理包循环依赖?
避免包之间相互依赖。仔细设计你的包结构,确保逻辑清晰。可以通过抽象和接口的方式解决较复杂的依赖问题。
8.2 如何测试包?
Go 提供了内置的测试功能。在包的同级目录中创建一个以 _test.go 结尾的文件,使用 go test 命令来运行测试。
示例代码:math/add_test.go
package mathimport "testing"func TestAdd(t *testing.T) {sum := Add(3, 5)if sum != 8 {t.Errorf("Expected 8, got %d", sum)}
}
运行测试命令:
go test ./math
9. 总结
学习包的使用,提高了代码的组织性和重用性,是Go语言开发的基础之一。通过今天的学习,你应该能够创建自己的包,并使用它们来组织大型应用程序。
练习
- 创建一个新的包,包含计算平方和立方的功能。
- 在
main.go中使用这个包并测试。 - 使用文档工具为你的新包生成文档,并尝试理解每个函数的用法。
怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!
相关文章:
15分钟学 Go 第 22 天:包的使用
第22天:包的使用 欢迎来到Go语言的第22天!今天,我们将深入探讨如何创建和使用包。通过学习包的使用,你将能够更好组织你的代码,提高复用性和可维护性。 1. 包的概念 在Go语言中,包是代码的基本组织单位。…...
【Leecode】Leecode刷题之路第35天之搜索插入位置
题目出处 35-搜索插入位置-题目出处 题目描述 个人解法 思路: 1.依次遍历数组,看目标值是否在数组中 2.如果不在,将目标值插入数组(涉及到数组移动、扩容),返回下标代码示例:(Java…...
速盾:海外cdn高防
随着互联网的快速发展,网站的安全性和稳定性变得越来越重要。尤其是对于大型企业和电商平台来说,保护用户数据和维护网站稳定运行是至关重要的。为了应对日益增长的网络攻击和恶意访问,海外CDN高防服务成为了一种非常受欢迎的解决方案。 首先…...
图书管理系统(JDBC)
AdminUser是管理员类 NormalUser是用户类 AddOperation是增加图书类 BorrowOperation是借书类 DelOperation是删除图书类 ExitOperation是退出类 FindOperation是查找图书类 IOPeration是接口 ReturnOperation是还书类 ShowOperation是显示所有图书类 注意:…...
模板初阶及STL简介
目录 一.模板初阶 1.泛型函数 2.函数模板 1.函数模板概念 2.函数模板使用格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 3.类模板 1.类模板的定义格式 2.类模板的实例化 二.STL简介 1.什么是STL 2.STL的版本 3.STL的六大组件 4.如何学习STL …...
UE5 不同的编译模式下,module的组织形式
由于最近在琢磨UE5.4这个引擎,在学习过程中,碰到了一些非常有意思的事情,我在尝试把之前写的一些底层库搬到UE里面,比如底层库,网络库等等,我通过建立module,将这些库用源代码的方式整合进了UE5…...
【ms-swift 大模型微调实战】
安装环境 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip install modelscope vllm ‘ms-swift[llm]’ -U 下载模型 modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir ./Qwen2.5-7B-Instruct 微调 实验环境:…...
Linux:网络基础
计算机是人的工具,人需要协作,于是有了网络 专用服务器->专用计算机 局域网:随着计算机的数量增加,通过交换机和路由器连接计算机 广域网:将远隔千里的计算机都连在一起 协议 协议就是约定俗成 计算机之间用光信号…...
mysql 的内连接、左连接、右连接有什么区别?
在MySQL中,内连接、左连接和右连接是三种常见的连接类型,它们用于通过共享一个或多个字段的值,将两个或多个表组合在一起进行查询。以下是这三种连接类型的详细区别: 一、内连接(INNER JOIN) 定义&#x…...
update-alternatives(选择工具)
0 Preface/foreword 1 update-alternatives介绍 1.1 选项和用法 1.2 install用法 update-alternatives --install <link> <name> <path> <priority> [--slave <link> <name> <path>] link:符号链接(软链…...
php解密,sg11解密-sg15解密 如何由sourceGuardian11-sourceGuardian15加密(sg11加密~sg15加密)的源码
sg11加密~sg11加密的PHP文件运行需安装SG11加密-SG15加密组件使用、支持WINDOW及LINUX各版本 sg11解密(SourceGuardian)-sg15解密(SourceGuardian),号称目前最安全的组件加密已可以解密,解密率99.9%,基本可以直接使用,代码特征是…...
b站小土堆PyTorch视频学习笔记(二)
Dataloader:提供不同类型的数据集;为后面的网络提供不同的数据形式 Dataset:提供一种方式去获取数据及其label(标签) 主要实现以下两个功能: {如何获取每一个数据及其lable;告诉我们总共有多少数据} fr…...
Linux的压缩及其解压命令
1、zip文件 压缩 zip linux.zip linux 解压 unzip linux.zip 2、gz文件 压缩 gzip 1.tar 解压 gzip -d 1.tar.gz 3、tar文件(tar可打/解包,压缩/解压文件) 打包 tar -cf 1.rar test 解包 tar -xf 1.tar 解压gz并解包 tar -xjvf archive_name.tar.bz2&#…...
GXYCTF2019:gakki
把题目给的附件解压后给了张图片,顺带着瞟一眼属性,没有值得注意的 binwalk检测一手,看见有个rar压缩包 提取出来的压缩包是有密码的,但是题目并没有给出获取密码的途径,所以先爆破试试,用最常用的四位数爆…...
顺序表(C 语言)
目录 一、线性表二、顺序表1. 静态顺序表2. 动态顺序表2.1 动态顺序表的实现分析2.2 动态顺序表的实现2.3 动态顺序表存在的问题 三、与数组有关的面试题1. 移除元素2. 删除有序数组中的重复项 一、线性表 线性表(linear list)是n个具有相同特性的数据元…...
一:时序数据库-Influx应用
目录 0、版本号 1、登录页面 2、账号基本信息 3、数据库案例 4、可视化 5、java案例 0、版本号 InfluxDB v2.4.0 1、登录页面 http://127.0.0.1:8086/signin 账号:自己账号 密码:自己密码 2、账号基本信息 查看用户id和组织id!&…...
Word文档丢失抢救方法:15 个 Word 文档恢复工具
MS Word 文档恢复的重要性 对于严重依赖 Microsoft Word 创建和编辑文档的个人和企业来说,MS Word 文档恢复是一个至关重要的方面。 文件损坏、系统崩溃和其他意外事件可能会导致 Word 文档中存储的重要数据丢失。 及时恢复这些文档有助于节省时间、精力和资源。 本…...
关于自动驾驶等级相关知识
本文主要介绍自动驾驶等级的一下知识,在介绍之前,首先要介绍一些基本知识,然后介绍自动驾驶不同等级 1、自动驾驶相关知识 监控和判断(OEDA):指对车辆周围的物体和事件进行检测和感知,并给出应…...
Java中跳转结构
在Java中,跳转结构用于控制程序的执行流程。 2.4.1 break 用途: 用于终止当前循环(for、while、do-while)或switch语句。 public class BreakExample {public static void main(String[] args) {for (int i 0; i < 10; i) {if (i 5) …...
CNN-Attention分类预测 | Matlab实现多特征分类预测
CNN-Attention分类预测 | Matlab实现多特征分类预测 目录 CNN-Attention分类预测 | Matlab实现多特征分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现CNN-Attention卷积神经网络融合注意力机制多特征分类预测,运行环境Matlab2023b及以上…...
[QA]插件式测试用例生成工具:LLM Test Case Tool 的设计与实现
一句话介绍:QA 在需求分析和测试设计中常用的能力沉淀到浏览器插件里:用户在阅读 PRD 时,可以直接在页面右下角调用 Workee,完成摘要、大纲、疑点、测试点、测试用例、UAT 用例和多页面分析。 1. 背景:为什么还需要这个…...
泥沙自动监测仪:从“估算”到“实测”,水保验收不再凭感觉
泥沙自动监测仪搭载一体化智能监测架构,聚焦水保监测核心指标,可全天候无人值守自动采集关键数据,精准监测径流量、实时径流含沙量、阶段性径流总量三大核心参数,全面覆盖水土保持监测刚需指标。区别于人工定时取样的片面性&#…...
从装饰器原理到实战:手把手教你用TypeScript为NestJS方法实现一个‘网络代理’
从装饰器原理到实战:手把手教你用TypeScript为NestJS方法实现一个‘网络代理’ 在Node.js生态中,装饰器(Decorator)作为一种元编程工具,正逐渐从实验性特性转变为现代框架的核心支柱。NestJS正是这一趋势的典型代表—…...
ZYNQ启动全解析:从BootROM到你的App,SD卡与QSPI Flash烧录究竟差在哪?
ZYNQ启动全解析:从BootROM到你的App,SD卡与QSPI Flash烧录究竟差在哪? 当一块ZYNQ开发板静静躺在桌面上,按下电源键的瞬间,芯片内部究竟发生了什么?为什么有的工程师选择SD卡启动,而另一些则坚…...
手把手教你给老旧JLink V8“续命”:AT91-ISP搭配SAM-PROG刷机全记录
手把手教你给老旧JLink V8“续命”:AT91-ISP搭配SAM-PROG刷机全记录 当你的JLink V8突然罢工,电脑反复提示"无法识别的USB设备",先别急着给它判死刑。这款经典调试工具采用的AT91SAM7S64主控芯片,其实有着惊人的"复…...
5分钟学会LDDC:让每一首歌都有完美歌词的终极指南
5分钟学会LDDC:让每一首歌都有完美歌词的终极指南 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地址: …...
Word怎么转图片?免费在线转换工具对比|2026实用方案
Word文档转换为图片是职场和学习中常见的需求。无论是为了方便分享、制作演示素材,还是保护文档隐私,掌握多种转换方法都能大幅提升工作效率。本文将为你盘点2026年最实用的Word转图片在线工具,以及电脑和手机端的完整解决方案。为什么要把Wo…...
HarmonyOS APP<<古今职鉴定>>开源教程第20篇:农历日期与节日计算
本篇学习农历算法,实现年俗内容的日期驱动图:农历日期与节日计算 的关键流程与实现要点。 学习目标 完成本篇后,你将能够: ✅ 理解农历算法原理✅ 实现公历转农历✅ 计算传统节日✅ 实现年俗日期匹配 预计学习时间 约 90 分钟…...
为什么四羟基合铝酸钠中的羟基明明是氢氧根离子却叫做羟基?
一、为什么四羟基合铝酸钠中的「羟基」明明是 OH⁻ 离子,却叫做「羟基」? 这是一个很好的概念辨析问题,涉及到配位化学命名规则与无机化学传统命名的差异。 1. 在配位化合物中,OH⁻ 作为配体时的名称就是「羟基」 在配合物&#x…...
Android FLAG_SECURE限制突破:如何让所有应用都能自由截屏?
Android FLAG_SECURE限制突破:如何让所有应用都能自由截屏? 【免费下载链接】DisableFlagSecure 项目地址: https://gitcode.com/gh_mirrors/dis/DisableFlagSecure 在Android应用开发中,FLAG_SECURE标志常常让用户感到困扰——当你需…...
