如何在Go中编写包

包由位于同一目录中的Go文件组成,这些文件在开头具有相同的package语句。你可以从包中包含额外的功能,使程序更复杂。有些包可以通过Go标准库获得,因此与Go安装一起安装。其他可以使用Go的go get命令安装。您还可以通过使用必要的package语句在要共享代码的相同目录中创建Go文件来构建自己的Go包。

本教程将指导您编写用于其他编程文件中的Go包。

前期准备

  • 按照[如何安装和设置Go本地编程环境]系列中的教程之一设置Go编程环境。在本地编程环境教程中按照步骤5创建您的Go工作空间。要遵循本文中的示例和命名约定,请阅读第一部分“编写和导入包”。
  • 要加深您对GOPATH的了解,请阅读我们的文章Understanding the GOPATH

编写和导入包

编写包就像编写任何其他Go文件一样。包可以包含函数、[类型]和[变量]的定义,然后可以在其他Go程序中使用它们。

在我们创建新包之前,我们需要在Go工作区中。这通常在我们的gopath下。例如,在本教程中,我们将包命名为greet。为此,我们在项目空间的gopath中创建了一个名为greet的目录。如果我们的组织是gopherguides,并且我们想在组织下创建greet包,同时使用Github作为我们的代码仓库,那么我们的目录将如下所示:

└── $GOPATH└── src└── github.com└── gopherguides

greet目录在gopherguides目录中:

└── $GOPATH└── src└── github.com└── gopherguides└── greet

最后,我们可以添加目录中的第一个文件。通常的做法是包中的primaryentry point文件以目录的名称命名。在这种情况下,我们将在greet目录中创建一个名为greet.go的文件:

└── $GOPATH└── src└── github.com└── gopherguides└── greet└── greet.go

创建文件后,我们就可以开始编写希望在项目之间重用或共享的代码了。在本例中,我们将创建一个名为Hello的函数,打印出Hello World

在文本编辑器中打开greet.go文件并添加以下代码:

greet.go

package greetimport "fmt"func Hello() {fmt.Println("Hello, World!")
}

让我们分解第一个文件。每个文件的第一行都需要你所在的package的名称。因为你在greet包中,所以要在package关键字后面加上包的名称:

package greet

这将告诉编译器将文件中的所有内容都视为greet包的一部分。

接下来,你需要在import语句中声明任何其他需要使用的包。在这个文件中,你只需要使用fmt包:

import "fmt"

最后,创建函数Hello。它将使用fmt包打印Hello, World!:

func Hello() {fmt.Println("Hello, World!")
}

现在你已经编写了greet包,你可以在创建的任何其他包中使用它。让我们创建一个新包,在其中使用greet包。

你将创建一个名为example的包,这意味着你需要一个名为example的目录。在你的gopherguides组织中创建此包,目录结构如下所示:

└── $GOPATH└── src└── github.com└── gopherguides└── example

现在您有了新包的目录,可以创建入口点文件。因为这将是一个可执行程序,所以将入口文件命名为main.go被认为是最佳实践:

└── $GOPATH└── src└── github.com└── gopherguides└── example└── main.go

在你的文本编辑器中,打开main.go并添加以下代码来调用greet包:

main.go

package mainimport "github.com/gopherguides/greet"func main(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204630.shtml

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

相关文章

【Vue第3章】使用Vue脚手架_Vue2_笔记

笔记 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue …

英语学习(衣服与服装篇)

一、购买服装 1.有关时尚的形容词 1)有许多可用于形容 fashion 和 clothes 的形容词。 cool 酷的 stylish 时髦的 in style 时髦 fashionable 时髦的,流行的 2)描述不喜欢的衣服 out of style 过时的 dre…

springboot和swagger版本不兼容问题解决

1.错误提示 org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPointerExceptionat org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLi…

Java程序员,你掌握了多线程吗?

文章目录 01 多线程对于Java的意义02 为什么Java工程师必须掌握多线程03 Java多线程使用方式04 如何学好Java多线程写作末尾 摘要:互联网的每一个角落,无论是大型电商平台的秒杀活动,社交平台的实时消息推送,还是在线视频平台的流…

ConcurrentHashMap实现线程安全原理

我们知道,在日常开发中使用的HashMap是线程不安全的,而线程安全类HashTable只是简单的在方法上加锁实现线程安全,效率低下,所以在线程安全的环境下我们通常会使用ConcurrentHashMap。 1. 初始化数据结构时的线程安全 HashMap的底…

【51单片机系列】矩阵按键扩展实验

本文对矩阵按键的一个扩展,利用矩阵按键和动态数码管设计一个简易计算器。代码参考:https://blog.csdn.net/weixin_47060099/article/details/106664393 实现功能:使用矩阵按键,实现一个简易计算器,将计算数据及计算结…

【Proteus仿真】【51单片机】简易计算器

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使动态数码管、矩阵按键、蜂鸣器等。 主要功能: 系统运行后,数码管默认显示0,输入对应的操作数进行四则运算&#x…

JavaScript <关于逆向RSA非对称加密算法的案例(附原代码)>--案例(五)

前言: 趁热打铁,标记一下RSA的算法逆向...第二篇会有详解(本篇重在过程) 正文: 废话不说,直接分析步骤图: 到了这里,可以看到在登录的时候,需要验证码(本篇不教反验证码) 下面是正题--->逆他的pwd(密码) 总结: 问题:怎么确定一个密文数据是基于什么算法做出来的呢? 答:…

当初你问我为什么选择计算机?回头现在来总结就是穷

还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天&#xff0…

NAS外网访问方案

基础流程 路由器开启端口映射(如果有猫则要配置猫为转发模式,由路由器直接拨号即可使用第三方程序让内网ip发布到公网上(如果有云服务器)需要开启防火墙端口 好用的第三方程序 FRP穿透 优点:开源免费,速…

期末速成数据库极简版【创建】(1)

目录 前言 【1】T-SQL语句创建数据库 【2】T-SQL语句删除数据库 【3】T-SQL语句创建表 完整性约束 数据类型 例子 【4】T-SQL语句修改表 【5】T-SQL语句删除表 关于数据库,在我们学习Linux网络编程后面会详细学习到,为了应付期末考试&#xff0…

[MySQL] MySQL中的内置函数

本篇文章主要是对MySQL中常见的内置函数进行了详细解释。例如有日期类函数、字符串类函数、数学类函数等等。希望本篇文章会对你有所帮助。 文章目录 一、日期类函数 1、1 使用详解 1、2 实例演示 二、字符串函数 2、1 使用详解 2、2 实例演示 三、数学函数 四、其他函数 &…

销售如何开发客户?

在销售过程中,开发客户是至关重要的一环。只有拥有足够的客户群体,才能为公司带来更多的业务机会和收入。 现如今,不管是哪一行竞争都十分激烈,特别是那些本身没有核心竞争力和核心技术的传统 to b企业,正处于十分尴尬…

Leo赠书活动-12期 【Java程序员,你掌握了多线程吗?】文末送书

Leo赠书活动-12期 【Java程序员,你掌握了多线程吗?】文末送书 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页&#xff1…

socket 套接字

1、套接字介绍 socket起源于Unix,遵循“一切皆文件”出发点,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 在设计模式中,Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,Socket去组织数据&#xf…

Pytorch线性回归教程

import torch import numpy as np import torch.nn as nn import matplotlib.pyplot as plt生成测试数据 # 长期趋势 def trend(time, slope0):return slope * time# 季节趋势 def seasonal_pattern(season_time):return np.where(season_time < 0.4,np.cos(season_time * …

vue3 + mark.js 实现文字标注功能

效果图 安装依赖 npm install mark.js --save-dev npm i nanoid代码块 <template><!-- 文档标注 --><header><el-buttontype"primary":disabled"selectedTextList.length 0 ? true : false"ghostclick"handleAllDelete"…

Linux学习笔记2

web服务器部署&#xff1a; 1.装包&#xff1a; [rootlocalhost ~]# yum -y install httpd 2.配置一个首页&#xff1a; [rootlocalhost ~]# echo i love yy > /var/www/html/index.html 启动服务&#xff1a;[rootlocalhost ~]# systemctl start httpd Ctrl W以空格为界…

String、StringBuffer、StringBuilder

String类 特点&#xff1a; 1.类由final关键字修饰&#xff0c;不可被继承&#xff1b; 2.value是一个由final修饰的字符数组&#xff0c;即字符串的长度不可修改&#xff1b; 3.实现了Comparable<T>接口&#xff0c;可进行比较&#xff1b; StringBuffer 特点&#x…

almaLinux centos8 下载ffmpeg离线安装包、离线安装

脚本 # 添加RPMfusion仓库 sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm wget -ymkdir -p /root/ffmpeg cd /root/ffmpegwget http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.14-2.el7.x86_64.rpmyum instal…