golang 知识图谱node
https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0linux
1、安装golang
最新版本安装包地址:https://golang.google.cn/dl/函数
要本身编译安装下载 source 源码包,不然根据本身 LINUX 系统下载对应版本的编译包,这里直接下载 go1.11.4.darwin-amd64.tar.gz测试
把下载的 golang 包解压到 /opt 下面: ui
sudo tar -C /opt/ -xzf go1.11.4.linux-amd64.tar.gz
解压完 golang 语言包存在 /opt/go 下, 使用命令查看go程序路径 , 显示 go 程序的路径是 /opt/go/bin/gogoogle
whereis go
查看 go 版本: 编码
/opt/go/bin/go version
若是须要在 终端内直接 输入 go 就能全局地使用 go 程序, 还须要配置系统环境变量。spa
在 /etc/profile 文件后面加入配置:命令行
export GOROOT=/opt/go export GOPATH=/home/ecalf/goProject export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN:$GOROOT/bin
或者创建下面软件接
sudo ln -s /opt/go/bin/go /usr/bin/go sudo ln -s /opt/go/bin/go /usr/local/bin/go
这些配置方法跟 node 的配置相似,有开发过 node 的经验应该会很熟悉。
查看 go 相关环境变量
go env
输出
GOARCH="amd64" GOBIN="/home/ecalf/goProject/bin" GOCACHE="/home/ecalf/.cache/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/home/ecalf/goProject" GOPROXY="" GORACE="" GOROOT="/opt/go" GOTMPDIR="" GOTOOLDIR="/opt/go/pkg/tool/linux_amd64" GCCGO="/usr/bin/gccgo" CC="gcc" CXX="g++" 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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build111443368=/tmp/go-build -gno-record-gcc-switches"
GOROOT 是 go 所在目录,go 命令在 GOROOT/bin 内;
GOPATH 是 go 的工做目录,能够指定多个文件夹。
$GOPATH 目录约定有三个子目录:
1. src 存放源代码(好比:.go .c .h .s等)
2. pkg 编译后生成的文件(好比:.a)
3. bin 编译后生成的可执行文件(为了方便,把此目录加入到 $PATH 变量中)
全部开发的 go 代码都要放在 GOPATH/src 指定的目录下,go get 等命令获取的代码包也会自动放置在这些目录下。
环境变量配置好后,查看go版本只要在命令行输入
go version
关于程序文件编码: Go语言的源文件采用UTF8编码。
2、hello world
在 $GOPATH/src 下建立项目文件夹 hello,在 项目文件夹下面编辑文件: hello.go
package main import "fmt" /*first go program */ //hello world func main() { //go 程序的新行不能以 { 开始 fmt.Println("Hello, World!") }
进入$GOPATH/src/hello 目录
使用 go run 命令直接在终端执行,查看运行结果:
go run ./hello.go
使用 go build 命令把 go 程序编译为可执行文件
go build ./hello.go
使用 go install 命令编译并生成可执行文件
go install hello
命令执行后,在 $GOPATH/bin 下生成了能够行文件 hello
在终端执行生成的程序
./hello
下面是几个关于运行和编译的命令:
go run: 编译并直接运行程序,产生一个临时文件,直接在命令行输出程序执行结果但不生成可执行文件,多用于程序的简单调试。当执行的文件引用了包内其余文件的方法时,必须指定编译用到的全部文件,这个时候可使用通配符来指定编译全部文件 go run *.go 。 该命令执行的文件能够放在任何目录内,只要正确指定要编译的文件路劲便可,但这些文件必须是同一个 main 包内的。
go build:测试编译包,主要检查是否会有编译错误,若是是一个可执行文件的源码(便是 main 包,go 的程序入口是 main 函数),就会在当前目录下直接生成一个可执行文件。
go install:该命令有2个做用,1.编译程序,先编译全部导入的包文件,而后才会编译主程序;2.将编译生成的可执行文件放到 $GOPATH/bin 目录下,编译后的包文件放到 $GOPATH/pkg 目录下。
其余 go 命令文档可查阅下面官方文档
https://golang.google.cn/cmd/
3、golang 的 package 概念
GO自己没有项目的概念,只有包,go 经过package来组织结构,每一个 go 代码文件的第一行非注释代码都必须使用 package 命令来声明代码所属的包名,同一个目录中(不含子目录)的全部代码文件只能属于同一个包,即一个文件夹就是一个包。
go 的包分两种:可执行包(命令包,有main函数,编译后放在$GOPATH/bin内)和不可执行包(只供调用,没有main函数,编译后放在$GOPATH/pkg内),包开发源代码都放在 $GOPATH/src 目录下,GO命令和编译器会在 $GOROOT/src 和 $GOPATH/src 目录下搜索相应的包。
由于导入包的时候要经过包文件的目录,而使用包提供的方法则须要经过包名,为了方便包定位,供调用的pkg包应该保持包名和目录名称一致,有main函数的可执行包的包名必须是main,可使用程序名称做为包的文件夹名称。
可执行包的 main 函数:
包的初始化:
包的导入:
导入 xxx/yyy 包并重名别名
import _ "xxx/yyy"
包的执行顺序: 依赖包常量、变量、函数 初始化,赋值 -> 依赖包 init函数 -> 包的初始化 ,赋值 -> 包的init函数 -> main 函数
一个简单的测试
src/bin/hello 包内有两个文件:
hello.go
package main import "fmt" import cat "../cat" func main() { fmt.Println("main function") fmt.Println("Hello, World!") sayHi(); wei(); cat.SayHello();//调用cat包的方法 } func sayHi(){ fmt.Println("say hi") } func init(){ fmt.Println("init in hello") }
wei.go
package main import "fmt" func init(){ fmt.Println("init in wei") } func wei(){ fmt.Println("wei...") }
src/bin/cat 包内有一个文件 cat.go :
package cat import "fmt" func init(){ fmt.Println("init in cat") } func miao(){ fmt.Println("miao miao ...") } func SayHello(){ miao() }
进入 src/hello 下调试:
go run *.go
编译生成可执行文件
go install *.go
执行结果
init in cat
init in hello
init in wei
main function
Hello, World!
say hi
wei...
miao miao ...
to be continued