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
    
    
  • 相关阅读:
    css注入获取网页中的数据
    跨路径读取cookie
    python 网络爬虫介绍
    ssh无法登录,提示Connection closing...Socket close.
    Tengine 添加第三方监控模块nginx-module-vts
    使用nginx很卡之strace命令
    MySQL清理慢查询日志slow_log的方法
    Python之json模块
    zabbix3调用接口发送短信告警
    RabbitMQ 安装 rabbitmq_delayed_message_exchange插件
  • 原文地址:https://www.cnblogs.com/biningooginind/p/12800400.html
Copyright © 2011-2022 走看看