最简单的 goland package 教程包括自定义包的使用

news2024/9/21 20:23:48

一、Hello World项目

一切从最简单开始:

  1. mkdir myapp
  2. cd myapp
  3. go mod init myapp // myapp是主项目名

这行命令将生成一个go.mod文件,这个文件会记录所有的包的依赖关系,一个空的go.mod只有项目名称和go版本号.

  1. nano main.go :
package main

import "fmt"

func main() {
	fmt.Println("Hello World!")
}
  1. go run main.go 直接运行或 go build -o run.exe 编译执行。

二、import go标准库/包

导入go语言的标准库非常简单,参见上例的Hello World中我们就导入了一个名为 fmt 的标准库,调用这个库里的Println函数:fmt.Println(“Hello World!”)


三、import 第三方包

  1. nano main.go:
package main

import (
	"fmt"
	"github.com/kataras/iris/v12" // iris是一个开源的Web框架
)

func main() {
	fmt.Println("Hello World!")
	app := iris.New()
	fmt.Println(app.APIBuilder)
}

  1. 如何安装第三方包?
    这时候直接执行 go build -o run.exe 会报错提示找不到这个包:

no required module provides package github.com/kataras/iris; to add it:
go get github.com/kataras/iris/v12

错误信息里也提示了你需要用 go get 命令去获取这个包,现在输入:
go get github.com/kataras/iris/v12
当然,出于不能明说的原因,当你输入这行命令后,基本上是没有反应的,我们还需要这样一下:
go env -w GOPROXY=https://goproxy.cn,direct
然后再次输入:
go get github.com/kataras/iris/v12
系统将自动下载 iris 所需的文件,再次执行:
go build -o run.exe
一切正常。

现在,再次打开 go.mod,会发现自动添加了一堆包的依赖关系,因为iris这个包本身也引用了大量其他的第三方包,这些都会记录在go.mod里。

那么,刚才系统自动下载的iris包的文件实际存储在哪?
首先我们要知道GOPATH系统变量的值,在Windows下用:
echo %GOPATH% ,Linux下用 echo $GOPATH
得到这个变量的值后,打开 C:\Users\USERNAME\go\pkg 发现这些包都在这。


四、import 自己创建的包

  1. 在主项目的根目录下创建一个子目录:mkdir mypackage
  2. cd mypackage
  3. nano mypackage.go
package mypackage // 注意包名是我们自定义的,与文件夹名称一致

import (
	"fmt"
)

func Sayhi() { // 这里定义了一个Sayhi的函数,注意首字母一定要大写,否则外部无法访问,这和其他OOP语言的public和private类似
	fmt.Println("Hello I come from another Package")
}

  1. 回到主项目 nano main.go
package main

import (
	"fmt"
	"myapp/mypackage" // myapp是我们的主项目名,mypackage是我们自定义包名
)

func main() {
	mypackage.Sayhi() // 调用mypackage下的Sayhi函数
}

五、后记

  • 关于package main的特殊性
    任何一个go项目都需要一个package main和一个 func main()函数,否则程序没有入口,无法运行。假设我们现在尝试一下在main.go中的第一行不使用package main而是随便创建一个比如package myapp,然后用build -o run.exe编译,尽管代码可以通过编译但却无法执行,如图:
    在这里插入图片描述

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

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

相关文章

VMware虚拟机三种网络模式详解之NAT(地址转换模式)

VMware虚拟机三种网络模式详解 NAT(地址转换模式) 二、NAT(地址转换模式) 刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT模式借助虚拟…

[组合数学]母函数与递推关系

文章目录 母函数---解决计数组合 球相同 盒子不同 不能是空 C n − 1 m − 1 \quad C_{n-1}^{m-1} Cn−1m−1​数的拆分 递推关系常系数线性齐次递推关系常系数线性非齐次递推关系汉诺塔递推关系 母函数—解决计数 普母函数—组合问题 指母函数—排列问题 f(x) ∑ i 1 n a i…

阿里云服务器开放端口的正确方式(超详细新版教程)

阿里云服务器端口怎么打开?云服务器ECS端口在安全组中开启,轻量应用服务器端口在防火墙中打开,阿里云服务器网以80端口为例,来详细说下阿里云服务器端口开放图文教程,其他的端口如8080、3306、443、1433也是同样的方法…

VMware虚拟机三种网络模式详解之Host-Only(仅主机模式)

VMware虚拟机三种网络模式详解 Host-Only(仅主机模式) 三、Host-Only(仅主机模式) Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机…

CAR-T细胞疗法在实体瘤研究中的挑战和新进展

什么是CAR-T? CAR-T是Chimeric Antigen Receptor T-cell(嵌合抗原受体T细胞)的缩写。它是通过将人体自身的T细胞进行基因改造,使其具有针对肿瘤细胞的抗原特异性,从而增强免疫系统对肿瘤细胞的攻击能力。CAR-T治疗的过程&#xf…

OJ练习第107题——二叉搜索子树的最大键值和

二叉搜索子树的最大键值和 力扣链接:1373. 二叉搜索子树的最大键值和 题目描述 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意…

SpringBoot——IOC与AOP

文章目录 IOC AOP一、 分层解耦1.1 IOC - 控制反转 详细1.2 DI - 依赖注入 详解 二、AOP2.1 了解2.2 快速入门 - AOP 开发步骤2.2.1 Maven依赖2.2.2 代码实现2.2.3 AOP 应用场景及优势 2.3 核心概念2.3.1 连接点 - JoinPoint2.3.2 AOP执行流程 2.4 通知2.4.1 通知类型2.4.2 通知…

百度贴吧视频发布软件视频教程(操作十分简单)

百度贴吧视频发布软件视频教程(操作十分简单) 软件有月卡、季卡、半年卡、年卡 【有时软件个别卡种售空,价格有上涨下降,关注获取当日价格】 我现在正在发帖的一个实时的一个画面,就是有很多同学问我就是喜羊羊今天还好跑吗,明天…

linux入门---通信的理解和匿名管道

这里写目录标题 为什么有通信通信的两个标准通信的本质管道通信的本质如何实现管道通信管道文件的特点管道的特征如何理解指令上的管道 为什么有通信 在我们的生活中有很多地方都需要用到通信,比如说出去玩要告诉伙伴们我们到哪了,做一件事的时候得通过…

MySQL基础(三十七)主从复制

1. 主从复制概述 1.1 如何提升数据库并发能力 此外,一般应用对数据库而言都是“ 读多写少 ”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做 主从架构 、进行 读写分离 ,这样同样可以提…

第四十六天学习记录:C语言进阶:KMP算法个人学习方法

学习了strstr库函数后,老师让了解KMP算法,这也算是我接触到的第一个算法。 由于这一块得自己翻资料自学,因此初识比较吃力。 后面根据自己的理解方式,个人认为理解KMP算法最关键点就是理解next数组是怎么生成的。 下面说说我理解n…

对于西瓜书神经网络的c#手写版本

本文根据西瓜书第五章中给出的公式编写,书中给出了全连接神经网络的实现逻辑,本文在此基础上编写了Mnist10手写10个数字的案例,网上也有一些其他手写的例子参考。demo使用unity进行编写,方便且易于查错。 该案例仅作为学习&#x…

CSS零基础快速入门(详细教程)

1,CSS概述 CSS是层叠样式表,由Cascading Style Sheets简称而来。 CSS的功能为:能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果,并且能够做到页面的样式和结构分离。 CSS的作用效果跟我们日常使用…

这个 快速排序详解过程 我能吹一辈子!

文章目录 快速排序概念快速排序递归实现Hoare版本挖坑法前后指针法 快速排序非递归实现Hoare版本挖坑法前后指针法 快速排序的俩个优化三数取中小区间优化 快速排序概念 快速排序是公认的排序之王,快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法&#…

【Linux】静态库与动态库

前言 对于C/C的学习者,我们经常听到C/C的标准库,我们也经常使用它们,但是我们在使用的时候经常只包含一下头文件,然后就使用了,我们从来没有认真的研究过C/C的标准库,而且C/C的头文件中只有声明并没有声明的…

文件上传,解析漏洞编译器安全(23)文件上传为什么加空格和修改为其他符号(例如换行符)问题

apache低版本解析漏洞 这个网站目录里有两个文件,一个是正常的php文件,另一个xx.php.xxx,源码是php源码,命名的文件,而访问中xxx的文件依旧可以执行出php代码的结果,而xxx就能当php文件解析,这…

uvc摄像头驱动uvc设备的注册分析

uvc摄像头驱动uvc设备的注册分析 文章目录 uvc摄像头驱动uvc设备的注册分析uvc_inituvc_probeuvc_register_videouvc_register_chainsuvc_register_termsuvc_register_video uvc_ioctl_opsuvc_fops uvc_init /driver/media/usb/uvc/uvc_driver.c /** UVC 驱动结构体*/ struct…

每日学术速递5.19

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.On the Hidden Mystery of OCR in Large Multimodal Models 标题:论大型多模态模型中 OCR 的隐藏奥秘 作者:Yuliang Liu, Zhang Li, Hongliang Li, Wenwen…

计算机图形学-GAMES101-11

显式几何的表示方法 Point Cloud 使用一系列点表示物体的表面。理论上可以表达空间中任何物体。如物体扫描会得到空间中一系列点,但在建模时我们要提取出大量多边形的面。点云对密度要求很高,因此不常使用。 Polygon Mesh 使用三角形表示物体。涉及三…

备份树莓派SD卡 — 保姆级教学

在我们树莓派项目开发的过程中,经常遇到以下问题: 1.自己辛辛苦苦开发出来的项目,害怕内存卡损坏,系统被破坏掉,想做一个备份。 2.自己的树莓派内存卡内存不够了,想将原来卡上的内容放在新的大容量内存卡…