在 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. element-ui Table 表格行间隔及行边框效果

    <el-table :data="tableData" style="width: 100%" :cell-class-name="tableC ...

  2. SpringBoot如何自定义一个starter

    SpringBoot starter,大家应该在平常写项目中应该非常熟悉,很多依赖都会提供集成SpringBoot的依赖,这样我们用起来就非常顺手,开箱就能用,那如何自定义一个starter呢? Sp ...

  3. SQLite3数据库的介绍和使用(面向业务编程-数据库)

    SQLite3数据库的介绍和使用(面向业务编程-数据库) SQLite3介绍 SQLite是一种用C语言实现的的SQL数据库 它的特点有:轻量级.快速.独立.高可靠性.跨平台 它广泛应用在全世界范围内 ...

  4. 存下吧!Spring高频面试题总结

    Spring是什么? Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring的优点 通过控制反转和依赖注入实现松耦合. 支持面向切面的编程,并且把应用业务逻辑和系统 ...

  5. 2020-08-31:描述HTTP的版本之间的区别,主要是1.0/1.1/2.0三个版本的区别。

    福哥答案2020-08-31: HTTP1.0与HTTP1.1的主要区别 1.长连接HTTP1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接.HTTP1.1:默认支持长连接.2. ...

  6. 2022-06-12:在N*N的正方形棋盘中,有N*N个棋子,那么每个格子正好可以拥有一个棋子。 但是现在有些棋子聚集到一个格子上了,比如: 2 0 3 0 1 0 3 0 0 如上的二维数组代表,一

    2022-06-12:在NN的正方形棋盘中,有NN个棋子,那么每个格子正好可以拥有一个棋子. 但是现在有些棋子聚集到一个格子上了,比如: 2 0 3 0 1 0 3 0 0 如上的二维数组代表,一共3 ...

  7. Django4全栈进阶之路21 项目实战(三种方式开发部门管理):方式二:CBV+Django内置类(ListView, CreateView, UpdateView, DeleteView, DetailView)

    在 Django 中,视图(View)是处理请求并返回响应的主要机制.Django 中有许多视图类可用于处理常见的 CRUD(Create.Read.Update.Delete)操作以及其他类型的请求 ...

  8. vue全家桶进阶之路45:Vue3 Element Plus el_button组件

    在 Vue 3 中,Element Plus 的 ElButton 组件提供了多种按钮类型和属性,可以用于实现不同的交互效果.下面是 ElButton 常用的作用和属性: 作用: 用于在页面上添加交互 ...

  9. Vue 新建项目+基本语法

    新建项目: 导入依赖:    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"> ...

  10. weexplus真机调试

    一.连接真机 C:\Users\Lenovo>adb devices List of devices attached C9K7N15722004375 device 确定连接无误,否则执行we ...