zoukankan      html  css  js  c++  java
  • GO环境及初始化项目(二)

    Go的安装

    补充说明:由于VS Code对go mod模式的支持暂时还不够完善,建议大家使用Goland编辑器。

    安装基本还是之前的老样子,不过现在的安装早已省事不少,不再需要配置环境变量。直接去官网,下载了安装包后直接安装即可

    在Go中文网进行Go最新版安装包的下载(或者复制网址浏览器打开https://studygolang.com/dl)

    不管是Windows还是MacOS都是非常简单快捷,将安装包下载好后直接一步到位next即可

    Linux下的安装,就是将下载的Linux安装包中的go文件夹,解压到/usr/local路径即可

    在控制台输入go version,如果显示了版本号,即代表安装成功

    Go环境变量的配置

    安装成功后,环境变量的配置也没有以前那么麻烦

    仅需要几步操作即可

    1、设置GOPATH路径(GOPATH路径是我们的工作区)

    go env -w GOPATH=我们自己的工作区路径
    

    例如我的就设为 /Users/naonao/go

    2、什么都别管,先打开GoMOD,再配置代理

    在这里感谢「七牛云」为我们中国区的Golang开发者提供的代理服务

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

    3、重要的环境变量

    Go 通过环境变量来做项目上的管理和控制,通过命令 go env 可以查看相关变量:

    C:Usersuser>go env
    
    set GO111MODULE=on
    
    set GOPATH=E:go
    
    set GOPROXY=https://goproxy.cn,direct
    set GOROOT=D:installGo
    set GOSUMDB=sum.golang.org
    
    

    关键环境变量:

    GOROOTGo 的安装目录,即可执行文件所在的目录;

    GOPATH工作目录并不是项目所有目录,编译后的二进制文件存放地import 包的搜索路径,主要包含 binpkgsrc

    GO111MODULE :启用 go module 管理项目,需要有 go.modgo.sum 文件;

    GOPROXY下载依赖时的代理,必须配置,不然无法成功下载;

    常用的代理有:

    # 1. 七牛 CDN
    export GOPROXY=https://goproxy.cn,direct
    
    # 2. 阿里云
    export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
    
    # 3. 官方
    export GOPROXY=https://goproxy.io,direct
    

    初始化项目

    GO项目目录解释

    src存放源代码

    pkg编译后生成的文件

    bin编译后生成的可执行文件

    新建go项目目录,并在项目的src目录中创建hello目录

    # 创建project的目录
    $ mkdir gproject
    
    # 进入目录
    $ cd gproject/
    
    # 初始化
    E:go>go mod init gproject
    go: creating new go.mod: module gproject
    

    在该目录中创建一个main.go文件:

    package main  // 声明 main 包,表明当前是一个可执行程序
    
    import "fmt"  // 导入内置 fmt 包
    
    func main(){  // main函数,是程序执行的入口
    	fmt.Println("Hello World!")  // 在终端打印 Hello World!
    }
    

    执行或编译后执行:

    # 直接run
    $ go run main.go 
    
     
    # 编译成二进制文件
    $ go build
    
    # 执行二进制文件
    
    

    go install

    go install表示安装的意思,它先编译源代码得到可执行文件,然后将可执行文件移动到GOPATH的bin目录下。因为我们的环境变量中配置了GOPATH下的bin目录,所以我们就可以在任意地方直接执行可执行文件了。

    跨平台编译

    默认我们go build的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?

    只需要指定目标操作系统的平台和处理器架构即可:

    SET CGO_ENABLED=0  // 禁用CGO
    SET GOOS=linux  // 目标平台是linux
    SET GOARCH=amd64  // 目标处理器架构是amd64
    

    使用了cgo的代码是不支持跨平台编译的

    然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。

    Mac 下编译 Linux 和 Windows平台 64位 可执行程序:

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
    

    Linux 下编译 Mac 和 Windows 平台64位可执行程序:

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
    

    Windows下编译Mac平台64位可执行程序:

    SET CGO_ENABLED=0
    SET GOOS=darwin
    SET GOARCH=amd64
    go build
    

    问题:

    1、$GOPATH/go.mod exists but should not

    开启模块支持后,并不能与GOPATH共存,所以把项目从GOPATH中移出即可

    2、解决go 生成的exe不在bin文件夹里的问题

    解决

    控制台执行go install

    补充:go install之后没有生成bin目录的原因(环境变量GOBIN)

    运行go install HelloWorld,没有报错,但工作空间里也没有生成bin目录。

    想起刚才重新配置环境变量时,把GOBIN也给配置了:/usr/local/go/bin。

    所以导致install生成的bin并没在当前工作空间生成对应打bin目录,而是把文件直接生成到里/usr/local/go/bin里。

    把GOBIN重新置为了默认的空,source之后并没成功。

    因为用的LiteIDE,它打环境变量没有更新过来,重启LiteIDE也没好使。

    最后把系统注销重新登录了一下好使了

    goland使用go mod模式

    第一步:创建空文件夹

    第二步:goland以项目方式打开文件夹

    第三步:设置goland中的配置,goroot,gomodule

    第四步:执行go mod init + 项目名,这个截图的地方多一个go modules,用于存放下载的包的

    第五步:创建.go文件,然后写上代码

    第六步:执行go mod tidy,下载所需的包,也会删除多余的包

    在执行命令go mod tidy时,Go module 会自动整理go.mod 文件

    go.mod的内容:

    项目名
    go 的版本
    第三方的包

    注意开启go mod 模式后 go get 下载的包都在 go/pkg 目录下

    将自动下载依赖包并解压,go get 总是获取最新版本的包
    如果包的版本更新了,go get 命令将自动修改go.mod文件
    go.sum 该文件记录了所依赖包的hash值,确保依赖包没有被篡改

    注意:
    经go get 修改的go.mod和go.sum都需要提交的代码库,
    这样别人获取项目代码并编译时 就会使用项目所要求的以来版本。

    本地保存使用包,命令

    go mod vendor
    

    执行该命令后,会出现一个vendor文件夹,里面就是你引用的所有包,由此就可以看出,使用mod后,已经不用依赖于原始的gopath,灵活性更高了。

    如果使用过程中有包的变动等,可以使用其他命令辅助,比如go mod tidy,整理你的包目录。

    go mod 的指令

    go.mod文件中通过指令声明module信息,用于控制命令行工具进行版本选择。一共有四个指令可供使用:

     module:  声明module名称;
     require: 声明依赖以及其版本号;
     replace: 替换require中声明的依赖,使用另外的依赖及其版本号;
     exclude: 禁用指定的依赖;
    
    

    go.sum 文件

    引入原由:
    为了确保一致性构建,Go引入了go.mod文件来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。

    考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构建

    为了解决Go module的这一安全隐患,Go开发团队在引入go.mod的同时也引入了go.sum文件,用于记录每个依赖包的哈希值

    在构建时,如果本地的依赖包hash值与go.sum文件中记录得不一致,则会拒绝构建。

    vscode 配置go环境

    Go的安装

    推荐Go官网安装,也可以在Go中文网下载。
    可以一直默认,也可以根据自己放到想要的路径。

    VSCodede的安装

    推荐VSCode官网下载,下载地址
    安装步骤也是一路next,路径选择根据个人。

    配置Go mod镜像

    1、开启gomod,再配置代理

    $ go env -w GO111MODULE=on 
    $ go env -w GOPROXY=https://goproxy.cn,direct
    
    通过命令 go env 可以查看相关变量
    
    常用的代理有:
    
    # 1. 七牛 CDN
    export GOPROXY=https://goproxy.cn,direct
     
    # 2. 阿里云
    export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
     
    # 3. 官方
    export GOPROXY=https://goproxy.io,direct
    
    

    VSCode的配置

    1. 下载Go插件

    然后点击右边的Install即可(我的是已经安装过的所以这样显示)

    2. 创建一个项目(文件夹)然后打开他(左上角的File -> Open Folder)

    3. 然后点击下方的TERMINAL,输入命令go mod init 你的项目名称,执行该命令后,执行的目录下面就会出现一个go.mod文件

    4. 新建一个Go文件, VSCode会激活Go插件,提示的工具全部安装就行了

    5. 然后继续在TERMINAL中手动执行go文件,输入指令go run 文件名

    go run main.go
    

    一些踩坑经验

    当你开启了GO111MODULE,仍然使用GOPATH模式的方法,在引入自定义模块时会报错。

    GO111MODULE 有三个值:off, on和auto(默认值)。

    • GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

    • GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

    • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

      • 当前目录在GOPATH/src之外且该目录包含go.mod文件

      • 当前文件在包含go.mod文件的目录下面。

    当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module。

    (1)使用了相对路径:import "./models"

    报错:build command-line-arguments: cannot find module for path /D/dev这里后面一堆本地路径
    这是因为在go module下 你源码中 impot …/ 这样的引入形式不支持了, 应该改成 impot 模块名/ 。 这样就ok了

    (2)使用结合了GOPATH的形式:import "Go-Player/src/ademo/models"

    于是我们把上面的import改成了结合GOPATH的如上形式

    • 报错:package Go-Player/src/ademo/models is not in GOROOT D:/development/go/src/GPlayer/src/ademo/models

    (3)彻底解决方法:用go env -u 恢复初始设置

    不再使用go mod:

    • go env -w GO111MODULE=off 或者 go env -w GO111MODULE=auto
    • go env -u GO111MODULE

    区别在于,如果GO111MODULE=on或者auto,在go get下载包时候,会下载到GOPATH/pkg/mod,引入时也是同样的从这个目录开始。如果这行了上述命令,那么在go get下载包时候,会下载到GOPATH/src 目录下

  • 相关阅读:
    React-Hooks
    RC-Select 学习笔记
    React Strict Mode
    CSSMotion VS animation in Angular
    jquery中has方法
    jquery中对于extend方法的使用
    一篇对于在jquery中使用jsonp技术介绍
    对于table元素的总结
    css3布局相关样式
    移动端去掉按钮点击热区
  • 原文地址:https://www.cnblogs.com/caibaotimes/p/14780816.html
Copyright © 2011-2022 走看看