zoukankan      html  css  js  c++  java
  • [Golang] go 常用命令

    go run

    编译生成临时可执行文件,程序结束后删除。适合用于小程序的调试,或者把 Go 当成脚本语言来用的场景。

    go build

    编译并生成可执行文件,默认与源码文件同名,可通过 -o 指定名称。

    go install

    Go 程序除了可通过预先编译成可执行文件进行分发外,常用的工具包等三方依赖,通常以源码的形式进行分发。

    使用者通过 go install 来获取,该命令接收一个指向源码的仓库地址,以 @ 加上版本号结尾。

    如果想使用最新的版本,则写 @latest

    示例:

    $ go install github.com/foo/bar@latest
     

    该命令实际上包含了如下过程:

    • 下载源码
    • 编译生成可执行文件
    • 安装到 $GOPATH/bin 目录

    而更新操作也是一样的,重新执行一次安装即可。

    代码格式化

    Go 自带了格式化命令 go fmt

    $ go fmt path/to/your/package
     

    同时也提供了一个增强工具 goimports 用于格式化 import 导入。

    安装:

    $ go install golang.org/x/tools/cmd/goimports@latest
     

    使用:

    $ goimports -l -w .
     

    代码风格检查

    使用 golint 对代码进行检查,安装如下:

    $ go install golang.org/x/lint/golint@latest
     

    假设目前项目中只有一个 main.go 的文件,其内容如下:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	fmt.Println("hello world!")
    }
     

    使用:

    # Lint 整个项目
    $ golint ./…
     

    不过,实测发现即使代码格式有问题,执行上述命令后,golint 什么也没输出,尝试后发现加上 -min_confidence 0 参数后就有输出了,

    $ golint -min_confidence 0 ./...
    main.go:1:1: should have a package comment, unless it's in another file for this package
     

    另外还有些代码错误语法合格是 Lint 检查不到的,譬如传递了错误数量的参数给方法,变更定义后未使用等,可用 go vet 命令来检查此类问题。

    $ go vet ./…
    vet: ./main.go:8:1: a declared but not used
     

    golangci-lint 是一个集成了 golintgo vet 以及其他一些三方保证代码质量的工具,安装后一次运行该命令即可。

    $ golangci-lint run
     

    Makefile

    开发过程需要重复执行一些操作,比如上面的 lint,fmt 以及编译等,人工操作未免烦杂,利用 Linux 世界的 Make 可以将这些动作写到 makefile 中,后续执行 make 命令即可自动完成。

    一个简单的示例:

    # makefile
    .DEFAULT_GOAL:= build
    
    fmt:
    	go fmt ./...
    .PHONY:fmt
    
    lint:
    	golint ./..
    .PHONY:lint
    
    vet:fmt
    	go vet ./...
    .PHONY:vet
    
    build:vet
    	go build main.go
    .PHONY:build
     

    如果你已经熟悉 makefile,上面代码不言自明。

    如果未了解过,其中冒号前面定义了一个任务或者叫 target,执行 make 命令时可指定具体的 target。

    其中 .DEFAULT_GOAL 定义默认任务,即,在没有指定任务名时运行的任务。

    冒号后面是该任务的依赖,表示需要依赖先执行完才行。

    紧跟任务的行定义该任务具体要执行的命令。

    .PHONY 部分的作用,可以避免如果项目中有与任务名同名文件夹时,产生冲突的问题。

    有了上面定义好的 makefile,就可以执行 make 命令了,

    $ make
    go fmt ./...
    go vet ./...
    # example.com/hello
    vet: ./main.go:8:2: a declared but not used
    make: *** [vet] Error 2
     

    Go 版本更新

    Go 编译后的程序不依赖运行时,所以不受 Go 版本的影响。但源码的编译是和版本有关的。

    一般情况下,不会有向后兼容性问题,但升级正确的做法,还是先安装新版,在新版下验证程序后再正式将 Go 的版本切换到新版。

    以当前 1.16.1 升级到 1.16.5 为例:

    $ go et golang.org/dl/go.1.16.5
    $ go1.16.5 download
     

    然后使用新版编译程序进行验证:

    $ go1.16.5 build
     

    验证通过后即可将新版的环境变量删除,

    “$ go1.16.5 env GOROOT
    /Users/gobook/sdk/go1.16.5
    $ rm -rf $(go1.16.5 env GOROOT)
    $ rm $(go env GOPATH)/bin/go1.16.5”
     

    然后安装最新 Go 版本即可。如果之前通过 Homebrew 安装,则仍然使用它升级即可。

    The text was updated successfully, but these errors were encountered:

    CC BY-NC-SA 署名-非商业性使用-相同方式共享
  • 相关阅读:
    ES6相关概念及新增语法
    正则表达式
    递归
    高阶函数和闭包
    严格模式
    this指向
    递归
    严格模式
    函数内部的this指向
    函数的定义和调用
  • 原文地址:https://www.cnblogs.com/Wayou/p/14966922.html
Copyright © 2011-2022 走看看