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及以上…...

[java][基础]JSP
目标: 理解 JSP 及 JSP 原理 能在 JSP中使用 EL表达式 和 JSTL标签 理解 MVC模式 和 三层架构 能完成品牌数据的增删改查功能 1,JSP 概述 JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的…...

《测绘学报》
《测绘学报》 办刊宗旨:尊重科学、弘扬学术、追求卓越、求实创新。60多年来,《测绘学报》作为承载着测绘地理信息科学技术和科研成果的载体,作为测绘地理信息行业人才培养和学术交流的阵地,坚持把学术论文的质量放在期刊工作的重要…...

代码随想录之链表刷题总结
目录 1.链表理论基础 2.移除链表元素 3.设计链表 4.翻转链表 5.两两交换链表中的节点 6.删除链表中的第N个节点 7.链表相交 8.环形链表 1.链表理论基础 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域…...

Python爬虫的“京东大冒险”:揭秘商品类目信息
开篇:欢迎来到Python的奇幻森林 在这个数据驱动的时代,我们就像一群探险家,穿梭在数字的森林中,寻找着隐藏的宝藏——商品类目信息。今天,我们将带领你一起,用Python这把锋利的剑,深入京东的神…...

双目视觉标定——1原理与实践
0 前言 双目视觉定位是目前机器(机器人)等领域中使用得非常广泛的视觉定位技术,双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算,所以双目相机装配要求…...

【设计模式系列】代理模式(八)
一、什么是代理模式 代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式在不直接访问实际对象的情况下,提供了对目标对象的间接访问。通过引入一个代理对象来间接操作实际对…...

微服务架构设计的初次尝试——基于以太坊智能合约 + NestJS 微服务的游戏社区与任务市场系统:架构设计
TMDOG微服务架构设计的初次尝试——基于以太坊智能合约 NestJS 微服务的游戏社区与任务市场系统:架构设计 一、开发背景及目的 随着区块链技术的蓬勃发展以及去中心化概念的兴起,越来越多的开发者开始探索如何将区块链应用到实际业务场景中࿰…...

“北斗+实景三维”,助力全域社会治理
在国家治理体系和治理能力现代化的大背景下,全域社会治理成为提升国家治理效能的关键。“北斗实景三维”技术组合,为全域社会治理提供了新的技术支撑和解决方案。本文将探讨这一技术如何助力全域社会治理,以及其在实际应用中的潜力和挑战。 …...

#渗透测试#SRC漏洞挖掘# 信息收集-常见端口及谷歌语法
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

如何使用java雪花算法在分布式环境中生成唯一ID?
引言 在现代分布式系统中,生成唯一标识符(ID)是一个常见的需求。传统的自增ID在分布式环境中会导致冲突,因此需要一种能够在分布式系统中生成全局唯一ID的算法。 雪花算法(Snowflake)就是为了解决这个问题而提出的一种高效的ID生成算法。本文将详细介绍雪花算法的原理、…...