当前位置: 首页 > news >正文

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World

最简单的教程,就需要从最简单的事情开始说起:

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

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

  1. nano main.go :
package mainimport "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 mainimport ("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 mainimport ("fmt""myapp/mypackage" // myapp是我们的主项目名,mypackage是我们自定义包名
)func main() {mypackage.Sayhi() // 调用mypackage下的Sayhi函数
}

五、后记

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

在这里插入图片描述


2、 相同的package但文件名不同的函数调用

比如说现在有2个文件: main.go 和 file.go

file.go 的内容是:

package mainimport "fmt"func Sayhello() {fmt.Println("Hi, I come from file1")
}

main.go的内容是:

package mainfunc main() {Sayhello()
}

尽管函数 Sayhello 并不存放在 main.go 中,但因为两个文件的第一行都是package main,因此在main.go 中我们不需要任何声明就可以正常调用 file.go 里的函数。存储在不同的文件中的代码,通过相同的package名聚合在一起,简单地将之视为一个大文件即可。

http://www.lryc.cn/news/70146.html

相关文章:

  • IMX6ULL的I2C驱动详细分析
  • 日志迁移到 logback
  • 开源字节 CRM 系统
  • 七、Spring Cloud Alibaba-Sentinel
  • 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化
  • 【MySQL】MySQL基础知识详解
  • RabbitMQ日常使用小结
  • ​​​​​​​博物馆文物馆藏环境空气质量无线监控系统方案
  • 测试理论----Bug的严重程度(Severity)和优先级(Priority)的分类
  • 斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名
  • 00后卷王,把我们这些老油条卷的辞职信都写好了........
  • JavaEE(系列12) -- 常见锁策略
  • 前端nginx接口跨域
  • 【国产虚拟仪器】基于 ZYNQ 的电能质量系统高速数据采集系统设计
  • Java前缀和算法
  • pico 的两个双核相关函数的延时问题
  • Doxygen源码分析: QCString类依赖的qstr系列C函数浅析
  • 华为OD机试之一种字符串压缩表示的解压(Java源码)
  • Microsoft Project Online部署方案
  • 飞浆AI studio人工智能课程学习(3)-在具体场景下优化Prompt
  • 企业工程行业管理系统源码-专业的工程管理软件-提供一站式服务
  • Ehcache 整合Spring 使用页面、对象缓存
  • Spring Cloud中的服务路由与负载均衡
  • rails routes的使用
  • Linux基础内容(21)—— 进程消息队列和信号量
  • STM32实现基于RS485的简单的Modbus协议
  • springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
  • zabbix监控之javasnmp自定义监控
  • Inertial Explorer处理pospac数据总结
  • tps和qps的区别是什么?怎么理解