关于go module

nnnnxcj · · 608 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

起因:

无法导入自己编写的包

go module

输入go env

GO111MODULE="on"

含义:

  • GO111MODULE=off: 不使用 Module-aware mode。
  • GO111MODULE=on: 使用 Module-aware mode,不会去 GOPATH 下面查找依赖包。
  • GO111MODULE=auto或unset: Golang 自己检测是不是使用Module-aware mode。
    根据官方描述在不设置GO111MODULE的情况下或者设为auto的时候,如果在当前目录或者父目录中有go.mod文件,那么就使用Module-aware mode, 而go1.12中,如果包位于GOPATH/src下,且GO111MODULE=auto, 即使有go.mod的存在,go仍然使用GOPATH mode:

GO PROXY

GOPROXY环境变量是伴随着modules而生,在go1.13中得到了增强,可以设置为逗号分隔的url列表来指定多个代理,其默认值为https://proxy.golang.org,direct。
direct:表示直接连接,所有direct后面逗号隔开都proxy都不会被使用。
这里可以设置GOPROXY=https://goproxy.io

一般默认没有开,开启方式:
Go版本>=1.13时,使用
go env -w GO111MODULE=on
(<1.13版本的方式)编辑下面的文件,export 设置,然后source文件
vim /etc/profile
vim ~/.zshrc
vim ~/.bash_profile (Linux找环境变量的先后顺序)

在项目中导入自己模块的流程

工程目录结构如下,


试图在main.go文件中引入modpkg的hello.go的Hello方法和world.go的World结构体

hello.go
world.go
  1. goland设置
    GoLand -> Preferences -> Go -> Go Modules
  1. 在工程目录下打开终端
    go mod init mymod
    路径下生成 go.mod 文件

  2. 在 main.go 中引入

package main

import (
    "fmt"
    "mymod/modpkg"
)

func main()  {
    modpkg.Hello()
    aa:=modpkg.World{}
    fmt.Println(aa)
}

运行结果:

注意:被引的方法需要大写开头,否则视为私有,不能被外部访问

参考:https://blanklin030.github.io/2019/12/05/go-mod-hello/


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:nnnnxcj

查看原文:关于go module

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

608 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传