在 Go 中,任何一个目录都可以被视为一个包。创建自定义包的基本步骤是:

  1. 新建一个目录,用于存放包的源文件。
  2. 在新建的目录中编写 Go 代码,代码的第一行应该是 package 包名。
  3. 使用 import 语句在其他地方导入和使用这个包。

接下来,我们详细看一下如何创建和使用自定义包。

创建自定义包

假设我们有一个项目目录结构如下:

myproject/
|-- go.mod
|-- main.go
|-- greet/
|-- greet.go

我们在 greet/greet.go 中创建一个包 greet:

// greet.go
package greet import "fmt" // Hello prints a greeting message.
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
}

在这个包中,我们定义了一个函数 Hello,它接收一个字符串参数 name,然后输出一个问候消息。

使用自定义包

在 main.go 中,我们可以导入并使用 greet 包:

// main.go
package main import (
"myproject/greet"
) func main() {
greet.Hello("World")
}

在这个例子中,我们首先导入了 greet 包,然后在 main 函数中,我们调用了 greet.Hello 函数,并传入了一个字符串参数 "World"。运行这个程序,会输出 "Hello, World!"。

Go Modules

在上面的例子中,我们假设 myproject 是一个 Go Modules 项目,即它有一个 go.mod 文件。Go Modules 是 Go 1.11 引入的官方包管理工具,用于管理项目的依赖。

在 myproject 目录下,你可以运行 go mod init myproject 来初始化一个新的模块。这会创建一个 go.mod 文件,它描述了你的项目的模块路径(在这个例子中是 myproject)和它的依赖。

当你导入 greet 包时,你需要使用它的完整导入路径,即 myproject/greet。这是因为在 go.mod 文件中,你的模块路径被定义为 myproject。

总的来说,创建和使用自定义包是 Go 中代码组织和复用的基础。理解如何创建和使用自定义包,对于学习和掌握 Go 语言至关重要。

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

【go语言】2.4.2 自定义包的创建和使用的更多相关文章

  1. go语言基础之包和自定义包与main包

    1.包 所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包.这样每个包的代码都可以作为很小的复用单元,被其他项目引用. 一个包的源代码保存在一个或多个以.go为文件后缀名的源文件中,通常 ...

  2. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  3. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...

  4. R语言入门级实例——用igragh包分析社群

    R语言入门级实例——用igragh包分析社群 引入—— 本文的主要目的是初步实现R的igraph包的基础功能,包括绘制关系网络图(social relationship).利用算法进行社群发现(com ...

  5. 关于iOS和android自定义包的名字

    自定义包名的使用,android的包名和ios的包名都是你的自定义包名!如下以新浪微博SDK自定义包名示例:(官方没的,自己踩过坑,方便后来人吧) 相关技术文档:http://www.apicloud ...

  6. Python 调用自定义包

    创建包 # mkdir -p /python/utils # touch /python/utils/__init__.py # vi /python/utils/Log.pyimport timed ...

  7. Golang自定义包导入

    # 文件Tree project -/bin -/pkg -/src -main.go -/test -test1.go -test2.go main.go package main import ( ...

  8. 《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor

    到目前位置我们一直在编写单文件代码,只有一个 main.go 文件.本节我们要开始朝完整的项目结构迈进,需要使用 Go 语言的模块管理功能来组织很多的代码文件. 细数 Go 语言的历史发展,模块管理经 ...

  9. Phyton自定义包导入。

    说明:同一个项目下的自定义包. 项目层次: 1:先建好项目Pybasestudty 2:建Python package,包名:pytestpk,__init__.py是建包时自动产生的文件. 3:在该 ...

  10. Go 使用自定义包(package)

    自定义包的分为两种: 1.同目录下的包: 2.不同目录下的包: *经测试,同目录下是不可以用不同包的文件的 同目录下的包: 不同文件中的变量和函数都可以直接访问 不同目录下的包: 1.把要在自定义包外 ...

随机推荐

  1. i < sqrt(n) 和 i*i < n 那一种写法更加高效?

    这两种写法效率依赖处理器.编译器和标准库.一般来说循环内的重复操作的性能差于循环外的单次操作. 参考文献 Which is more efficient to use in a for loop, i ...

  2. 《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作

    摘要:由 Istio社区指导委员会成员和华为云云原生团队联合编著的云原生服务网格书籍< Istio 权威指南>重磅上市 本文分享自华为云社区<< Istio 权威指南 > ...

  3. 2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109

    2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值. 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109 ...

  4. 2021-05-17:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,可以任意切分成若干个不相交的子数组。其中一定存在一种最优方案,使得切出异或和为0的子数组最多。返回这个最多数量。

    2021-05-17:数组中所有数都异或起来的结果,叫做异或和.给定一个数组arr,可以任意切分成若干个不相交的子数组.其中一定存在一种最优方案,使得切出异或和为0的子数组最多.返回这个最多数量. 福 ...

  5. 2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, ... 第i轮,把i选择给a或者b。 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动。

    2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, - 第i轮,把i选择给a或者b. 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动. 答案 ...

  6. pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

    首先需要在微信公众平台或开放平台中创建应用,并获取到AppID和AppSecret. 在pbootcms中创建一个自定义模板页面(例如:wechat_login.html),并在该页面中添加以下代码, ...

  7. Python竖版大屏 | 用pyecharts开发可视化的奇妙探索!

    你好!我是@马哥python说,一枚10年程序猿‍,正在试错用pyecharts开发可视化大屏的非常规排版. 以下,我用8种ThemeType展示的同一个可视化数据大屏. 1.SHINE主题 2.LI ...

  8. AcWing 243. 一个简单的整数问题2-(区间修改,区间查询)

    给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l+1],-,A[r]都加上 d. Q l r,表示询问数列中第 l∼r个数的和. ...

  9. 巧用OpenSSH进行域内权限维持

    最近在Windows服务器上安装OpenSSH,意外发现了一个很有意思的技巧,可用来做域内权限维持,废话不多说,直接上步骤. 01.利用方式 (1)在已经获得权限的Windows服务器上,使用msie ...

  10. Redis系列16:聊聊布隆过滤器(原理篇)

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...