1.1 Go安装与项目结构初始化
软件安装
安装包下载地址为:https://golang.org/dl/
如果打不开可以:
https://golang.google.cn/dl/
https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
wget https://dl.google.com/go/go1.10.3.src.tar.gz #源码包
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz #运行包
新版(2020-04-04)
wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz
新版(2020-05-24)
wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz
新版(2020-08-27)预计该版本将很长时间内不会在大变动
wget https://golang.org/dl/go1.15.linux-amd64.tar.gz
tar -zxvf go1.10.3.linux-amd64.tar.gz
mv go /usr/local/
环境变量设置
GO语言有软件工程或项目的思想,
创建项目目录
mkdir -p goapp/{src,bin,pkg}
设置项目环境变量,GOROOT为go安装目录,GOPATH为项目所在目录
vim /etc/profile
export GOROOT=/usr/local/go
export GOPATH=/usr/local/automng/src/goapp
export PATH=$PATH:$GOROOT/bin
export GOROOT=/opt/app/go export GOBIN=/opt/wks/go/gopath/bin export GOPATH=/opt/wks/go/gopath export PATH=$PATH:$GOROOT/bin:$GOBIN
source /etc/profile
which go
/usr/local/go/bin/go
GOPATH允许有多个路径,以冒号分隔即可;第一个目录并不完全与后面的等价,在使用go get 下载go项目时,只会写入到GOPATH的第一分区
GO 包引用
一个项目通常只有一个入口,即一个main
mkdir -p src/{main,ch01,ch02} mkdir src/ch02/ch0201 $ cat src/ch01/a.go package ch01 var a = "鱼只有七分钟的记忆吗?" var b uint16= 65534 var c bool = true //供外部调用的方法一定要以大写字母开头 func Show(){ println(a,b,c) } $ cat src/ch02/b.go package ch02 var a int = 10 var b = 10 func Show(){ //该声明方式必须写在方法内部 c := 10 println(a,b,c) } $ cat src/ch02/ch0201/bb.go package ch0201 import "fmt" func Show() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //多重赋值 area = LENGTH * WIDTH fmt.Printf("面积为 : %d", area) println() println(a, b, c) } $ cat src/main/main.go package main import ( "ch01" "ch02" "ch02/ch0201" ) func main(){ ch01.Show() ch02.Show() ch0201.Show() }
GO语言的执行
可以使用 go run aa.go的运行脚本
$ go run src/main/main.go
鱼只有七分钟的记忆吗? 65534 true
10 10 10
面积为 : 50
1 false str
编译GO脚本为可执行文件
将以上程序打包编译为一个可执行文件,前提是要设置GOPATH目录,go build会自动去$GOPATH/src目录下寻找相关目录,一个脚本中只能有一个package main包,即只有一个入口
以下这个命令可以在系统的任何目录下执行,go会自动去$GOPATH/src目录下找main目录
$ go build -o testgo main
$ ll
total 1976
-rwxrwxr-x 1 tanpengfei tanpengfei 2020337 Sep 28 10:44 testgo
$ ./testgo
鱼只有七分钟的记忆吗? 65534 true
10 10 10
面积为 : 50
1 false str
当然了,一个main目录可以有多个main包的文件,程序本身不会报错,但你就不无法在该目录下使用go build了,只能使用go run aa.go,所以建议一个包下只有一个main入口
go build的目录
go build -o execname main 中的main是一个目录,可以修改为其他目录,比如build,但这个目录是GOPATH变量中的第一个分支下的目录,比如下面的变量定义
export GOPATH=/opt/code/gopath:/disk/git/goapp/goapp:$GOPATH
那么执行go build -o execname build 表示将/opt/code/gopath/src/build目录的程序打包为execname可执行文件
因此go build -o execname build这条命令可在系统上的任意位置执行
补充说明
使用IDE创建go项目时,会自动创建三个目录:src,bin,pkg
进入一个包含main方法的目录,执行 go install ,会在pkg下生成以一个以.a为后缀的文件(对我们没用,当文件存在时不会重复生成而是直接使用),然后在bin目录下生成一个可执行文件
进入一个包含main方法的目录,执行 go build,每次都会重新拉取所有涉及到的代码编辑并生成可执行文件
重点总结
GOPATH的作用:程序的运行、编译都是以GOPATH为基础的
IDE goland
https://www.jetbrains.com/go/ 下载社区版
https://download.jetbrains.8686c.com/go/goland-2019.3.1.exe
go代理(mac环境记录)
go env -w GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn
或者环境变量中配置
export GOPROXY=https://goproxy.cn,direct
go install -v golang.org/x/tools/gopls@latest
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步