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为基础的

原文地址:https://www.cnblogs.com/perfei/p/9717394.html