less than 1 minute read

GOROOT & GOPATH

GOROOT就是go的安装路径。用homebrew的话会自动设置好。

GOPATH有两个用途:存放binaries,以及存放自己的代码。

homebrew安装的话会自动将GOPATH设置为~/go~/go的bin文件夹包含了下载的 & 自己install的binaries。另一个pkg文件夹,目测是通过go modules来管理bin文件夹中的binaries。

我自己再开了一个新目录存放自己的代码,比如叫~/gocode。我只要把这个路径用冒号加到GOPATH变量就行了。

gocode目录如下:

gopath

也要创建bin, pkg, src三个文件夹。至于.mod文件下面会提到。

Go Package & Module

https://learnku.com/go/t/27649

go的package和java差不多,都是组织代码的单位。

有几个要注意的:

  1. 一个package只能有零或一个main方法,即为package的入口。包含该方法的文件必须在开头写上package main.

    执行 go install <package> 命令后,系统会尝试在指定的包目录里寻找带有 main 包声明的文件。找到之后,Go 就知道这是可执行的程序,需要被编译为二进制文件。一个包里可以有很多文件,但是只能其中一个文件里有 main 函数,标志着这个文件是程序的入口文件。

    如果一个包中没有带有 main 包声明的文件,那么,Go 就会在 pkg 目录中创建一个 包管理 (.a) 文件。

  2. 不管是变量还是函数,开头是大写的话就代表是export的,其他包也可以访问。不然只有包内可以访问。

  3. 使用go install可以将当前package打包到bin目录中,避免重复编译。

  4. Module是Go 1.13后的新功能。module的语义是“一个项目/应用”,一个module可以包含很多package。所以看上图,如果我们的应用是github.com/yuhengfdada/test, 那么我们就在这个目录下执行go mod init,就会有一个.mod文件。里面可以配置这个项目/应用的元信息。

碰到的问题

在上图中,我试图在test.go中import greet包,但是显示package greet is not in GOROOT (/usr/local/Cellar/go/1.17.6/libexec/src/greet)。解决方法是执行go env -w GO111MODULE=off

总结

从零创建go应用,建议直接跟着这篇官方文章做:

https://go.dev/doc/code

基本涵盖了上文的内容。

Tags:

Categories:

Updated: