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

go modules

文章目录

  • 1. 简介
  • 示例
    • 1. 示例——同一项目
    • 2. 示例——不同项目
    • 3. 示例——添加远程模块依赖库

1. 简介

go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。

示例

1. 示例——同一项目

mkdir moduledemo
cd moduledemo
touch main.go
go mod init moduledemo
mkdir mypackage
touch mypackage/mypackage.go

目录结构

`-- moduledemo|-- go.mod|-- main.go`-- mypackage`-- mypackage.go

文件:
mypackage.go

package mypackageimport "fmt"func New(){fmt.Println("mypackage.New()")
}

main.go

package mainimport ("fmt""moduledemo/mypackage"  // 导入同一项目下的mypackage包
)
func main() {mypackage.New()fmt.Println("main end")
}

运行

> go run main.go 
mypackage.New()
main end

2. 示例——不同项目

目录结构

|-- moduledemo
|   |-- go.mod
|   `-- main.go
`-- mypackage|-- go.mod`-- mypackage.go

mypackage 目录文件:

  • mypackage.go 文件同上;
  • go.mod 通过 go mod init mypackage 生成

moduledemo 目录文件

  • main.go
import ("fmt""mypackage"
)
func main() {mypackage.New()fmt.Println("main")
}
  • go.mod
module moduledemogo 1.14require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"
  • require 用来定义依赖包及版本
  • replace 替换对应的库

3. 示例——添加远程模块依赖库

下面示例中添加一个依赖项github.com/spf13/cobra库。Cobra是一个用于创建控制台应用程序的流行库,不用关系库的具体用法。

mkdir mypackage
cd mypackage
touch main.go

文件
main.go

package mainimport ("fmt""github.com/spf13/cobra"
)func main() {cmd := &cobra.Command{Run: func(cmd *cobra.Command, args []string) {fmt.Println("Hello, Modules!")},}fmt.Println("Calling cmd.Execute()!")cmd.Execute()
}

添加依赖库:

  • go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。
-->$ go mod init mymodule
go: creating new go.mod: module mymodule
-->$ go get github.com/spf13/cobra
go: github.com/spf13/cobra upgrade => v1.6.1
-->$ cat go.mod 
module mymodulego 1.15require github.com/spf13/cobra v1.6.1 // indirect

目录结构:

mymodule
|-- go.mod
|-- go.sum
`-- main.go

执行:

-->$ go run main.go 
Calling cmd.Execute()!
Hello, Modules!
http://www.lryc.cn/news/35193.html

相关文章:

  • Baklib客户故事:快递助手ERP
  • MongoDB学习(java版)
  • RK3568平台开发系列讲解(显示篇)什么是DRM
  • Python蓝桥杯训练:基本数据结构 [二叉树] 上
  • vuex基础之初始化功能、state、mutations、getters、模块化module的使用
  • WebSphere中间件漏洞总结
  • Unity之ASE实现影魔灵魂收集特效
  • 半入耳式耳机运动会不会掉、佩戴超稳固的运动耳机推荐
  • 使用Tensorflow完成一个简单的手写数字识别
  • OpenGL三种向着色器传递数据的方法 attributes,uniform,texture以及中间产物
  • 详解package.json和package-lock
  • 02-CSS
  • JavaScript 中的类型转换机制以及==和===的区别
  • RocketMQ基础篇(一)
  • Android前沿技术—gradle中的build script详解
  • 深入浅出PaddlePaddle函数——paddle.zeros_like
  • 物料-零部件分类属性
  • TypeError: cannot pickle ‘module‘ object
  • [MySQL索引]3.索引的底层原理(二)
  • JavaScript混淆——逆向思维的艺术
  • 数据库管理-第六十期 监听(20230309)
  • 概率论与数理统计相关知识
  • SOC计算方法:卡尔曼滤波算法
  • 【C语言】自定义类型、枚举类型与宏定义
  • Java进阶(下篇2)
  • 03单链表
  • ESLint、Prettier插件的安装与使用
  • matlab在管理学中的应用简matlab基础【三】
  • NDK JNI 变声器实现
  • VMLogin防关联指纹浏览器的主帐号和子账号区别介绍