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
这句话里面应该是没有指定输出目录,所以直接在当前文件夹里找,找不到也许就在源文件的文件夹里。运行结果如下:
跑通了再分析每一行在干什么。
第一行意思应该是我这段代码如果编译的话生成的包名应该叫什么,之后 fmt
被导入,这个包是格式化输入输出相关函数的,之后的主程序里面就要用到,这里先导入了。
主程序里也很简单,打印一行字符串,这个打印函数就是之前导入的包里面的。
这个程序打开的同时我也在安装插件,两件事同时干,插件安装好了但是插件推荐的包没安装上,不过这不影响我跑通了 Hello World
程序。
环境配置的后续
打开了一个相关文件以后 VS Code 就给我推荐了这个插件,那么安装就好了。
然后这个扩展过了一会给我推荐了几个需要安装的包,在右下角,点击全部安装就好了。
可以看到输出显示超时了,那么还是需要配置一下之前的那个 goproxy 的。(前面想着应该不至于连不上,然后网络就寄了)
安装不了的话会报这个,先把网络配好再理它。
goproxy 配置
打开终端并执行
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
完成。
重新安装扩展推荐的包
这两个包应该是叫 gopls
和 go-outline
,观察之前的输出:
前六个是 gopls
的依赖,最后一个是这个包本身。
这七个包的报错信息完了以后才是之后的输出,那么最后 go-outline
这个包要不然就是没别的依赖,要不然就是依赖已经被包含在前面的那些依赖里面了。
验证一下自己的猜想,每个项目里的 go.mod
记录的就是项目依赖,按照报错信息找到对应的仓库:
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
安装成功,截图如下:
根据插件的官方文档,我应该不需要再安装 go-outline
了,现在我装的是最新版本的 go
,这个包是给老版本 go
代码用的。
这样的话应该没啥问题了吧,再有要装的插件再说好了。