写在前面:之前一直是写python的,发现最近大厂都在转go,为了职(减)业(少)生(发)涯(量),决定自学go,开帖记录学习go的踩坑之路,希望对像我一样初识go的coder有点帮助。
go的环境变量
为什么先说环境变量,因为go包之间的调用涉及go的编译,但是go编译时,项目目录必须在GOPATH中,利用go env查看本机go的环境变量。
macbook_pro:go m$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/m/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/m/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/64/lf1hgd2n6m76x7vp8x30nfsm0000gn/T/go-build109540047=/tmp/go-build -gno-record-gcc-switches -fno-common"
比较重要的有以下两个
GOROOT="/usr/local/go" #go安装路径
GOPATH="/Users/m/go" #项目所在路径,go的工作空间,可以修改成你的项目目录,修改方式点击我
如果用GoLand编辑器也可以在设置中添加,如下图
GOPATH下需要包含bin,pkg,src三个文件夹,具体用途如下:
bin:编译后生成的可执行文件
pkg:编译后生成的文件
src:存放源代码
go包之间的引用
步入正题,先介绍下我的项目目录,有图有真相
等我先去画个图。。。
图画好了,费了我好几万脑细胞。。。
代码如下:
/Users/m/go/src/main.go
package main
import (
"common"
"fmt"
)
func main() {
common.A()
fmt.Println("This is func main")
}
/Users/m/go/src/common/a.go
package common
import (
"fmt"
)
func A() {
B()
fmt.Println("This is func A")
}
/Users/m/go/src/common/b.go
package common
import (
"base"
"fmt"
)
func B() {
base.C("")
fmt.Println("This is func B")
}
/Users/m/go/src/base/c.go
package base
import (
"fmt"
)
func C(x string) {
fmt.Println("This is func C, receive func b" + x)
}
接下来需要把上面的包先编译,再安装
/Users/m/go/src
macbook_pro:src m$ go build common
macbook_pro:src m$ go install common
macbook_pro:src m$ go build base
macbook_pro:src m$ go install base
然后运行main.go函数
/Users/m/go/src
macbook_pro:src m$ go run main.go
This is func C, receive func b
This is func B
This is func A
This is func main
总结:
1.同目录下引用:不需要导包,直接可用
2.非同目录下引用:需要先导包
3.go程序中可以被外部包调用的函数和变量,函数名和变量名必须是大写字母开头,小写字母开头是不能被外部包调用的。
查看下一篇golang排坑基础知简介请点我