Go官方安装与体验教程,VSCODE中Go配置

Go官方安装与体验教程,VSCODE中Go配置

go下载与安装

  1. 前往https://golang.google.cn/dl/下载linux系统对应的安装包,后缀为.tar.gz
  2. 前往https://golang.google.cn/doc/install安装指导查看相关命令,在linux系统下
    1. tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz,查看tar --help,-C选项的意思是-C, --directory=DIR change to directory DIR,-x表示解压,-z表示使用gzip解压,-f后接压缩文件路径,这条命令将解压.tar.gz文件,解压目录为/usr/local
    2. export PATH=$PATH:/usr/local/go/bin添加环境变量/usr/local/go/bin到$PATH的末尾,使用echo $PATH可以看到当前的$PATH的值,可以看到不同的目录是用冒号隔开的,因此PATH=$PATH:/usr/local/go/bin表示将/usr/local/go/bin加如到$PATH的末尾.随后source $HOME/.profile使得更改生效.
    3. go version有输出代表安装成功

Go 官方体验教程

  1. 前往https://golang.google.cn/doc/tutorial/getting-started查看Get Started教程

  2. 尽量使用梯子FQ完成教程,浪费时间在网络问题上实在没必要.

  3. $HOME目录下创建一个GoLearning文件夹,进入此文件夹,创建hello目录

  4. 在hello目录中指定工作区目录GOPATH,Go通过GoPATH来确定生成中间文件和可执行文件的路径,命令为

    # GOPATH默认是空的,pwd导出当前目录,`pwd`获得当前目录值
    export GOPATH=`pwd`
    # 可用echo $GOPATH查看当前GoPATH的值
    
  5. 文本编辑写一个hello.go文件,必须从main包开始

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, World!")
    }
    
    1. go run hello.go输出Hello,world

    2. 将hello.go改为

      package main
      
      import "fmt"
      
      import "rsc.io/quote"
      
      func main() {
          fmt.Println(quote.Go())
      }
      
    3. 跳转到GoLearning文件夹,执行go mod init hello在GoLearning文件夹下生成go.mod文件
      8. go run hello.go下载rsc.io/quote,输出Don't communicate by sharing memory, share memory by communicating.目前来看go mod应该是一个包管理器,有点像python的pip工具或conda工具
      9. 随后官方提供了一些代码描述go语言的一些特性,random包,测试框架等,略过,本博客只关注环境部分.
      10. 上述使用go run命令编译运行hello.go,适合调试阶段使用.在发布时,需要生成相关的二进制可执行文件和依赖文件,此时使用go install命令,go install 的作用有两步:第一步是编译导入的包文件,所有导入的包文件编译完才会编译主程序;第二步是将编译后生成的可执行文件放到 bin 目录下($GOPATH/bin),编译后的包文件放到 pkg 目录下($GOPATH/pkg)。($GOPATH为Go的工作目录)
      11. 在hello文件夹中执行go install,将生成bin/hello可执行文件,相关依赖包放置在pkg文件夹中,通过设置$GOBIN环境变量可以指定二进制文件路径,类似设置GOPATH,使用export GOBIN=/yourpath,若希望能在shell中任意目录执行hello,可将hello加入PATH环境变量末尾,类似前文,使用export PATH=$PATH:/yourpath/hello

VSCODE中配置

  1. # 通过设置七牛云代理来避免下载失败,关键是开启go env
    # 中的GO111MODULE和GOPROXY
    # 启用 Go Modules 功能
    export GO111MODULE=on
    # 配置 GOPROXY 环境变量
    export GOPROXY=https://goproxy.io
    # 使环境变量设置生效
    source #HOME/.profile
    # go env检查这两个字段
    # 这里的设置是永久的,对所有目录生效
    # 如果只想设置当前GOPATH的env
    # 则执行
    # go env -w GO111MODULE=on
    # go env -w GOPROXY=https://goproxy.io,direct
    
  2. 在hello目录下执行以下go install,执行完后bin目录下会生成golint,godef,gocode等二进制工具,之后只需要将这些二进制文件拷贝到go工程中即可使用这些常用格式化,检查等工具了.

    go install github.com/mdempsky/gocode 
    go install github.com/uudashr/gopkgs/v2/cmd/gopkgs 
    go install github.com/ramya-rao-a/go-outline 
    go install github.com/acroca/go-symbols 
    go install golang.org/x/tools/cmd/guru
    go install golang.org/x/tools/cmd/gorename 
    go install github.com/cweill/gotests/...
    go install github.com/fatih/gomodifytags 
    go install github.com/josharian/impl 
    go install github.com/davidrjenni/reftools/cmd/fillstruct 
    go install github.com/haya14busa/goplay/cmd/goplay 
    go install github.com/godoctor/godoctor 
    go install github.com/go-delve/delve/cmd/dlv 
    go install github.com/stamblerre/gocode 
    go install github.com/rogpeppe/godef 
    go install github.com/sqs/goreturns 
    go install golang.org/x/lint/golint 
    go install golang.org/x/tools/gopls 
    
  3. 此时go.mod文件中显示

    module hello
    
    go 1.15
    
    require (
    	github.com/acroca/go-symbols v0.1.1 // indirect
    	github.com/cweill/gotests v1.5.3 // indirect
    	github.com/davidrjenni/reftools v0.0.0-20201119194839-01cf781abd5b // indirect
    	github.com/fatih/gomodifytags v1.13.0 // indirect
    	github.com/go-delve/delve v1.5.0 // indirect
    	github.com/godoctor/godoctor v0.0.0-20200702010311-8433dcb3dc61 // indirect
    	github.com/haya14busa/goplay v1.0.0 // indirect
    	github.com/josharian/impl v1.0.0 // indirect
    	github.com/mdempsky/gocode v0.0.0-20200405233807-4acdcbdea79d // indirect
    	github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb // indirect
    	github.com/rogpeppe/godef v1.1.2 // indirect
    	github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
    	github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518 // indirect
    	github.com/stamblerre/gocode v1.0.0 // indirect
    	github.com/uudashr/gopkgs/v2 v2.1.2 // indirect
    	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
    	golang.org/x/tools v0.0.0-20201204222352-654352759326 // indirect
    	golang.org/x/tools/gopls v0.5.5 // indirect
    )
    
    

    4.vscode工作区设置setting.json

    // 具体字段设置还得在实践中体会
    {
        "files.autoSave": "onFocusChange",
        "workbench.colorTheme": "Visual Studio Dark",
        "go.buildOnSave": "package",
        "go.lintOnSave": "package",
        "go.vetOnSave": "package",
        "go.buildTags": "",
        "go.buildFlags": [],
        "go.lintFlags": [],
        "go.vetFlags": [],
        "go.coverOnSave": false,
        "go.useCodeSnippetsOnFunctionSuggest": true,
        "go.formatTool": "goreturns",
        "go.goroot": "/usr/local/go",
        "go.gopath": "/home/liuzhan/GoLearning",
        "go.gocodeAutoBuild": false,
        "http.proxy": "https://goproxy.cn",
    }
    

    5.vscode launch.json设置

    属性	说明
    name	定义配置名字
    type	指定语言,这里我们填go即可
    request	launch ,attach, 当需要对一个已经运行的的程序 debug 时才使用 attach,其他时候使用launch
    mode	对于 launch 有 auto, debug, remote, test, exec, 对于 attach只有local,remote
    program	指定包, 文件或者是二进制的绝对路径
    env	调试程序时需要注入的环境变量, 例如:{ "ENVNAME": "ENVVALUE" }
    envFile	绝对路径,env的值会覆盖envFile的值
    args	需要传给调试程序的命令行参数
    showLog	布尔值,是否在调试控制台打印日志, 一般为true
    logOutput	日志输出目标, 使用逗号分隔达到使用多个组件输出日志的目的 (debugger, gdbwire, lldbout, debuglineerr, rpc), 当 showLog 为 true 有效
    buildFlags	构建程序时需要传递给 Go 编译器的 Flags
    build tags: 如果在构建时需要构建标签, (比如:go build -tags=whatever_tag ), 则需要使用标签buildFlags 并添加内容: "-tags=whatever_tag" ,如果你需要使用多个标签时, 则需要使用单引号引起来,像这样:"-tags='first_tag second_tag third_tag'"
    remotePath	如果mode为remote时, 需要指定调试文件所在服务器的绝对路径
    processId	进程 id
    host	目标服务器地址
    port	目标端口
    ${workspaceFolder} 在工作区的的根目录调试程序
    ${file} 调试当前文件
    ${fileDirname} 调试当前文件所属的程序包
    
    上面是一些前置知识,目前需要的简单运行和调试只需要这样设置launch.json就行,在带有main的函数文件中执行CTRL+F5,即可执行,相当于go run $file
    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Launch File",
                "type": "go",
                "request": "launch",
                "mode": "auto",
                "program": "${file}",
                "env": {},
                "args": []
            }
        ]
    }
    
posted @ 2020-12-06 14:32  技术流选手  阅读(1210)  评论(0编辑  收藏  举报