手把手教你导入Go语言第三方库


Posted in Golang onAugust 04, 2021

最好的学习方式就是实践。 我们通过导入gin包来深入学习。

环境

  • go 1.13.5
  • goland 2019.3.1
  • manjaro-gnome3.34.2

环境变量

首先回想一下,我们安装goland的时候,设置了几个比较重要的环境变量,也就是GOROOT和GOPATH。

GOROOT比较容易理解。也就是我们go语言的安装目录,标准库什么的就放在里面的。在linux中的话,默认安装到/usr/lib/go中,我们创建项目时选择的SDK也就是这个。

手把手教你导入Go语言第三方库

GOPATH可以理解为工作目录。GOPATH指定的目录下一般有三个子目录。如下:

GOPATH    //go工作目录
  |
  |--bin     //编译后生成的可执行文件
  |
  |--pkg     //编译后生成的包/库文件
  |
  |--src     //项目的源代码文件

bin目录容易理解,而pkg包就是放第三方库的地方,像go get后的包就在里面。src目录就是放项目源代码的,一般都是把多个项目都放到src目录下,然后对这些项目统一管理,也就是共用bin和pkg,如果在不同目录放项目,然后把这些项目都放到GOPATH中,显然会有冲突。故一般都不推荐这么做。

我们可以在终端中输入go env查看环境变量,下面是我的配置目录:

手把手教你导入Go语言第三方库

手把手教你导入Go语言第三方库

实践导包

现在我们先创建一个新项目,实际尝试一下。

手把手教你导入Go语言第三方库

然后新建一个main文件,输入:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() 
}

再打开终端,输入go mod init, 直接跑一下,会发现直接在下载import的包了,这时候如果直接跑的话,是发现能直接跑的,但是发现报红, 输入也不会自动补全。

手把手教你导入Go语言第三方库

这时候只需打开setting,把go mod打勾,如下。然后直接跑一下,或者重新打开ide因该就不会报红了。

手把手教你导入Go语言第三方库

当然我们也可以手动自己下载,只需使用go get命令。

go get -u github.com/gin-gonic/gin

但是发现根本没有反应,输入go env查看发现有个变量叫GO111MODULE,这玩意是干什么的呢, 是用来配置go mod用的,比如什么时候到go path,goroot去找,或者直接在go mod中找。一共有三个状态。

  • GO111MODULE=auto, 这个是默认值,根据一些情况自动判断是否打开go mod。
  • GO111MODULE=on,打开go mod
  • GO111MODULE=off关闭go mod

于是我们输入go env -w GO111MODULE=on打开go mod,再次输入go get -u github.com/gin-gonic/gin,但是会发现下载的速度简直感人,这是因为服务器在国外的嘛,你懂得,我们可以设置代理。

go env -w GOPROXY=https://goproxy.cn,direct

再次go get,发现速度飞起,尝试run一下,如果出现报红问题,像上面那样解决一下。

当然我们也可以项目放到GOPATH目录以外。如下

手把手教你导入Go语言第三方库

同样的,如果要导包的话,像上面那样使用go mod就行了。

我们可以进入GOPATH目录下的pkg目录,会发现我们导入的包在这里面的。

手把手教你导入Go语言第三方库

我们也可以进入goland,

手把手教你导入Go语言第三方库

发现外部库有两个,一个是SDK,也就是go的安装目录(GOROOT),标准库就在这里的。另一个是go mod,就是我们刚刚导入的,放到GOPATH/pkg下的包。

到此这篇关于手把手教你导入Go语言第三方库的文章就介绍到这了,更多相关Go导入第三方库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
golang在GRPC中设置client的超时时间
Apr 27 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
Go 实现英尺和米的简单单位换算方式
Apr 29 Golang
解决golang post文件时Content-Type出现的问题
May 02 Golang
golang switch语句的灵活写法介绍
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Golang 实现WebSockets
Apr 24 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 #Golang
golang内置函数len的小技巧
Jul 25 #Golang
修改并编译golang源码的操作步骤
Go语言应该什么情况使用指针
Jul 25 #Golang
基于Go语言构建RESTful API服务
Jul 25 #Golang
go goroutine 怎样进行错误处理
Jul 16 #Golang
go开发alertmanger实现钉钉报警
Jul 16 #Golang
You might like
php4的session功能评述(三)
2006/10/09 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
php 常用的系统函数
2017/02/07 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
Python 解析XML文件
2009/04/15 Python
python3学生名片管理v2.0版
2018/11/29 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
办公室主任职责范文
2013/11/08 职场文书
大学生军训自我评价分享
2013/11/09 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
代理词怎么写
2015/05/25 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL