Go 语言基础(2) | 青训营笔记

2,360 阅读3分钟

Go 的 Hello World

package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}

要运行的话直接:

go run example/01-hello/main.go

要想先编译再运行编译结果:

go build example/01-hello/main.go

这句话里面应该是没有指定输出目录,所以直接在当前文件夹里找,找不到也许就在源文件的文件夹里。运行结果如下:

image.png

跑通了再分析每一行在干什么。

第一行意思应该是我这段代码如果编译的话生成的包名应该叫什么,之后 fmt 被导入,这个包是格式化输入输出相关函数的,之后的主程序里面就要用到,这里先导入了。

主程序里也很简单,打印一行字符串,这个打印函数就是之前导入的包里面的。

这个程序打开的同时我也在安装插件,两件事同时干,插件安装好了但是插件推荐的包没安装上,不过这不影响我跑通了 Hello World 程序。

环境配置的后续

打开了一个相关文件以后 VS Code 就给我推荐了这个插件,那么安装就好了。

image.png

然后这个扩展过了一会给我推荐了几个需要安装的包,在右下角,点击全部安装就好了。

image.png

可以看到输出显示超时了,那么还是需要配置一下之前的那个 goproxy 的。(前面想着应该不至于连不上,然后网络就寄了)

安装不了的话会报这个,先把网络配好再理它。

image.png

goproxy 配置

打开终端并执行

$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct

完成。

重新安装扩展推荐的包

这两个包应该是叫 goplsgo-outline,观察之前的输出:

image.png

前六个是 gopls 的依赖,最后一个是这个包本身。

image.png

这七个包的报错信息完了以后才是之后的输出,那么最后 go-outline 这个包要不然就是没别的依赖,要不然就是依赖已经被包含在前面的那些依赖里面了。

验证一下自己的猜想,每个项目里的 go.mod 记录的就是项目依赖,按照报错信息找到对应的仓库:

goplsgo-outline

gopls 的依赖如下:

module golang.org/x/tools/gopls

go 1.18

require (

github.com/google/go-cmp v0.5.9

github.com/jba/printsrc v0.2.2

github.com/jba/templatecheck v0.6.0

github.com/sergi/go-diff v1.1.0

golang.org/x/mod v0.7.0

golang.org/x/sync v0.1.0

golang.org/x/sys v0.2.0

golang.org/x/text v0.4.0

golang.org/x/tools v0.3.1-0.20221213193459-ca17b2c27ca8

golang.org/x/vuln v0.0.0-20221109205719-3af8368ee4fe

gopkg.in/yaml.v3 v3.0.1

honnef.co/go/tools v0.3.3

mvdan.cc/gofumpt v0.4.0

mvdan.cc/xurls/v2 v2.4.0

)

require golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 // indirect

require (

github.com/BurntSushi/toml v1.2.1 // indirect

github.com/google/safehtml v0.1.0 // indirect

golang.org/x/exp/typeparams v0.0.0-20221031165847-c99f073a8326 // indirect

)

然后 go-outline 的依赖如下:

module github.com/ramya-rao-a/go-outline

go 1.16

require golang.org/x/tools v0.1.1

好像和我想象的不太一样,我以为就是和安装的包名是对应的,当时总共只有八个包没安装成功啊,难道说是要一层一层走的,第一层没过后面就先不管了?当时没安装成功的包名是 gotests, gomodifytags, impl, goplay, dlv, staticcheck, gopls, go-outline。之后学了更多再验证这个事情吧。

回到正题,配置好 goproxy 拉包到本地应该没问题了,这回再试试。

2023/05/14 更新,gopls 安装成功,截图如下:

image.png

根据插件的官方文档,我应该不需要再安装 go-outline 了,现在我装的是最新版本的 go,这个包是给老版本 go 代码用的。

image.png

这样的话应该没啥问题了吧,再有要装的插件再说好了。