go开发基础(零)


go开发基础0 — 搭建go开发环境及常用命令

环境搭建

此处将介绍vscode搭建go环境的过程

下载和安装

go

由于官网需要调查兵团,所以go的下载推荐到go中文网去下载,我这边以windows版本进行讲解。

在下载好对应版本的msi文件后,直接一路点下去即可,如果想将go安装路径放到其他的话也可自行选择,注意的是,这里选择的安装路径即是goroot的路径。

vscode

这个直接下就完事了,然后 在插件商店中下载go插件(找最多人下的准没错)。

环境变量

右键此电脑->点击属性->点击高级系统设置->点击环境变量->修改用户变量如下图

GOPATH是你一般写go程序的地方,GO111MODULE是要开启go mod,GOPROXY调了再说。

然后win+R键入cmd打开命令行,键入go version查看go版本,输入go env查看配置好的环境变量

写个helloworld

在gopath目录下新建src目录,再在src下新建一个helloworld目录,再在helloworld中新建main.go键入以下代码。

package main//程序入口处

import "fmt"//输入输出常用的包

func main(){
    fmt.Println("helloworld")
}

在terminal中切换到当前目录,并键入go mod init helloworld,此时你会发现目录中多了个go mod文件,这个是用来管理你项目所用到的包的,暂时不用管。

然后键入go run main.go即可将你的helloworld跑起来啦。

调试

按F5选择go,然后在生成的.vscode目录下的launch.json文件中输入以下代码。

{
    "version": "0.2.0",
          "configurations": [
              {
                  "name": "LaunchGo",
                  "type": "go",
                  "request": "launch",
                  "mode": "auto",
                  "program": "${fileDirname}",
                  "cwd": "${workspaceFolder}",
                  "env": {
                      "GOPATH": "",//这两项请自行查看
                      "GOROOT": ""
                  },
                  "args": [],
                  //"showLog": true
              }
          ]
   }
  

关于包和目录结构

go采用import来调用包,代码如下:

import "fmt"//要加双引号
import (
    "github.com/wdstql"//绝对路径找包,以src作为起始目录
    m "github.com/aaa"//m作为别名
    _ "github.com/bbb"//_表示只是调用了这个包的init函数,并不直接使用这个包里的函数
)

同一个文件夹下属于同一个包,可以互相调用函数

go中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。

类属性如果是小写开头,则其序列化会丢失属性对应的值,同时也无法进行Json解析。(暂时没看懂)

目录

gopath目录就是我们存储我们所编写源代码的目录。该目录下往往要有3个子目录:src,bin,pkg。

src —- 里面每一个子目录,就是一个包。包内是Go的源码文件

pkg —- 编译后生成的,包的目标文件

bin —- 生成的可执行文件。

文件

go中的文件类型分为三种:

  1. 命令源码文件:声明自己属于main代码包,源码文件是 Go 程序的入口。

    同一个代码包中最好也不要放多个命令源码文件。多个命令源码文件虽然可以分开单独 go run 运行起来,但是无法通过 go build 和 go install。

  2. 库源码文件:库源码文件就是不具备命令源码文件上述两个特征的源码文件。存在于某个代码包中的普通的源码文件。

    库源码文件被安装后,相应的归档文件(.a 文件)会被存放到当前工作区的 pkg 的平台相关目录下。

  3. 测试源码文件:名称以 _test.go 为后缀的代码文件,并且必须包含 Test 或者 Benchmark 名称前缀的函数:名称以 Test 为名称前缀的函数,只能接受 *testing.T 的参数,这种测试函数是功能测试函数,如func Test(t *testing.T ){}。名称以 Benchmark 为名称前缀的函数,只能接受 *testing.B 的参数,这种测试函数是性能测试函数,如func Benchmarkxxx(b *testing.B){}

go常用命令

在详细分析这4个命令之前,先罗列一下通用的命令标记,以下这些命令都可适用的:

名称 说明
-a 用于强制重新编译所有涉及的 Go 语言代码包(包括 Go 语言标准库中的代码包),即使它们已经是最新的了。该标记可以让我们有机会通过改动底层的代码包做一些实验。
-n 使命令仅打印其执行过程中用到的所有命令,而不去真正执行它们。如果不只想查看或者验证命令的执行过程,而不想改变任何东西,使用它正好合适。
-race 用于检测并报告指定 Go 语言程序中存在的数据竞争问题。当用 Go 语言编写并发程序的时候,这是很重要的检测手段之一。
-v 用于打印命令执行过程中涉及的代码包。这一定包括我们指定的目标代码包,并且有时还会包括该代码包直接或间接依赖的那些代码包。这会让你知道哪些代码包被执行过了。
-work 用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它。这个目录下的文件可能会对你有用,也可以从侧面了解命令的执行过程。如果不添加此标记,那么临时工作目录会在命令执行完毕前删除。
-x 使命令打印其执行过程中用到的所有命令,并同时执行它们。

go run

专门运行命令源码文件,接受命令源码文件和多个库源码文件作为参数,不接受测试源码文件,格式为go run xxx.go,其编译文件并生成对应的归档文件和可执行文件并最终运行。

go run 命令在第二次执行的时候,如果发现导入的代码包没有发生变化,那么 go run 不会再次编译这个导入的代码包。直接静态链接进来。

go build

go build 用于编译我们指定的源码文件或代码包以及它们的依赖包。但是注意如果用来编译非命令源码文件,即库源码文件,go build 执行完是不会产生任何结果的。这种情况下,go build 命令只是检查库源码文件的有效性,只会做检查性的编译,而不会输出任何结果文件。

go build 编译命令源码文件,则会在该命令的执行目录中生成一个可执行文件,但不会执行这个可执行文件。

go install

go install 用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。

go install 命令只比 go build 命令多做了一件事,即:把编译好的结果移到$GOPATH/pkg或者$GOPATH/bin

go get

go get 命令用于从远程代码仓库(比如 Github )上下载并安装代码包。注意,go get 命令会把当前的代码包下载到 $GOPATH 中的第一个工作区的 src 目录中,并安装。

由于go mod的存在,go get的使用变得少了,不再赘述,可自行查看

引用文章


文章作者: Wdstql
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wdstql !
评论
  目录