zoukankan      html  css  js  c++  java
  • [go]包和工程管理

    一、系统环境变量

    GOROOT

    指定go的安装目录,win是在 CGo,Linux在 /usr/local/go下,如果不是默认的目录,则需要指定 GOROOT环境变量,否则不需要

    GOPATH

    工作目录,可以指定多个,环境变量中用 ; 分割 go get下载目录的时候默认会下载到第一个GOPATH的src目录下,找 包也是从第一个目录开始往后找。可以指定两个工作区,第一个用来专门存放下载库

    • src:源代码文件
    • pkg:编译的中间文件
    • bin:编译产生可执行文件

    GOOS GOARCH用来设置 编译产生可执行文件的目标OS和CPU架构

    go进行交叉编译:

    linux

    GOOS=linux GOARCH=amd64 go build hello.go
    
    GOOS=windows GOARCH=amd64 go build hello.go
    



    二、包

    1、作用域

    包内大写的:全部包可见

    包内小写的:仅仅在本包内可见

    {}块作用域:只在块内可见

    	{
    		y:=999
    	}
    	log.Println(y) //报错 y不可见
    

    2、包引用

    包的全局绝对路径就是 $GOROOT/src$GOPATH/src

    当然也可以引用相对路径

    • 可以给包起别名

    • import _ "fmt"  //引用而不使用  
      
    • import . "fmt" //引用所有
      func main(){
          Println("ok") //这样就可以直接使用包里面的函数
      }
      

    3、init()

    包里面可以有 init() 函数,一般用来初始化一些包中要用到的全局变量




    三、mod包管理

    mod只是版本管理工具, 在go mod初始化的项目目录下执行go get xxx,会将package下载到$GOPATH/pkg/mod目录下安装,并且添加或更新到go.mod文件中

    1、相关环境变量

    GO111MODULE=off go命令从不使用新模块支持。使用GOPATH模式(查找vendor目录和GOPATH路径下的依赖)
    GO111MODULE=on go命令开启模块支持,只根据go.mod下载和查找依赖
    GO111MODULE=auto 默认值,go命令根据当前目录启用或禁用模块支持。仅当当前目录位于$GOPATH/src之外并且其本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。
    

    2、go mod文件结构

    module note-gin
    
    go 1.13
    
    require (
    	github.com/gin-gonic/gin v1.5.0
    	github.com/go-redis/redis v6.15.7+incompatible
    	github.com/go-sql-driver/mysql v1.4.1
    	github.com/howeyc/fsnotify v0.9.0 // indirect
    	github.com/jinzhu/gorm v1.9.12
    	github.com/mattn/go-colorable v0.1.6 // indirect
    	github.com/onsi/ginkgo v1.12.0 // indirect
    	github.com/onsi/gomega v1.9.0 // indirect
    	github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
    	github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017
    	github.com/pilu/miniassert v0.0.0-20140522125902-bee63581261a // indirect
    	github.com/qiniu/api.v7/v7 v7.4.1
    	github.com/robfig/cron v1.2.0
    	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
    	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
    	gopkg.in/yaml.v2 v2.2.4
    )
    
    1. module语句指定包的名字(路径)

    2. require语句指定的依赖项模块

    3. replace语句可以替换依赖项模块

    4. exclude语句可以忽略依赖项模块

    module my/thing
    require other/thing 	v1.0.2 //需要的模块
    require new/thing 		v2.3.4
    exclude old/thing 		v1.2.3 //排除的模块的某些版本
    replace bad/thing 		v1.4.5 	=> good/thing v1.4.5  //替换的模块
    

    3、相关命令

    init

    go mod init TestGoMod
    
    

    在当前目录下创建一个名为 TestGoMod的mod文件

    module TestGoMod
    
    go 1.13
    
    

    list

    go list -m all  查看所有依赖以及间接模块当前版本
    go list -u -m all 查看所有依赖以及间接依赖当前版本和可升级版本
    go list -m -versions github.com/gin-gonic/gin 查看某些模块的所有版本
    
    

    get

    go get -u ./... 更新所有模块
    go get -u github.com/xxxx  更新指定模块最新版本
    
    go get github.com/xxxxx  下载模块依赖
    
    //加上@v1.x.x  可以获取指定版本
    go get github.com/gin-gonic/gin@v1.3.0
    go get github.com/gin-gonic/gin@v1.1.4
    
    

    build

    go build ./...  构建当前项目
    go test ./...  构建测试模块
    
    

    tidy

    架构和构建标记的其他组合中修剪所有不需要的依赖项,并添加其他依赖项所需的任何依赖项

    go mod tidy
    
    
  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/biningooginind/p/12800400.html
Copyright © 2011-2022 走看看