Golang版本:go version go1.17.3 windows/amd64
学习环境:Visual Studio Code
环境变量
环境变量名称 |
作用 |
GOROOT |
Golang的安装目录。 |
GOBIN |
使用go install 命令安装程序时二进制文件的输出目录。 |
GOPROXY |
设置代理,由于某些你懂得的原因很重要,推荐https://goproxy.cn/。 |
GOPATH |
Golang工作区,一台机器可以有多个,不用Go Module的情况下代码必须放在工作区。 |
GOPATH目录详情
一台机器上的GOPATH目录可以有多个,所以有时候会比较迷惑。比如有两个GOPATH目录,执行go get
的时候可能源码下载到了第一个GOPATH里面这时候在第二个里面就找不到了。
GOPATH目录下分三个目录:
目录结构参考:
1
2
3
4
5
6
7
8
9
10
11
|
H:\GO\SRC\DMSTORY.CN #src下先跟公司名或网站名
└─ddm #后跟个人或项目名
├─greet #greet包
│ sayhi.go #包的代码
│
├─helloworld #项目main包
│ main.go #main包代码,名字不一定叫main
│
└─math #math包
add.go
substract.go
|
基础命令
命令 |
作用 |
go run |
后跟包含main方法的源码文件,直接生成二进制(在临时目录里)并运行。 |
go build |
- 不加参数,相当于
go build . 。 - 目录参数,必须是main包目录,生成二进制文件,文件名为为目录名,如果不是main包则无视。
- 文件参数,必须是main函数所在文件,生成二进制文件,文件名为源码文件名,如果不包含main函数则报错。
|
go install |
- 不加参数,相当于
go install . 。 - 未设置
GOBIN ,只接受目录参数,生成包对应的二进制文件(或库文件)到当前GOPATH的bin目录(或pkg)目录。 - 已设置
GOBIN ,如果是目录参数则生成包对应二进制到GOBIN目录或库文件到pkg目录,文件参数(需要包含main函数)同理,只是文件名会是源码文件名。
|
go get |
下载安装远程包(-d 参数表示仅下载) |
代码结构
都在注释里了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//main.go
/*
指定代码所在的包名。
包是Golang编译和代码复用的基本单位,可以使逻辑之间保持相对独立。
包不能直接或间接相互引用,导致环状依赖。
main包是特殊的包,每个程序必须要有一个,且包内必须有一个main函数
*/
package main
/*
导入其他包。
导入名称为从src下开始到包一级的路径,src包括GOROOT下的和GOPATH下的,不同GOPATH相通
如果出现冲突需要自己起一个别名,就像下面的mymath一样,否则会屏蔽标准库的math
*/
import (
"fmt"
"dmstory.cn/ddm/greet"
mymath "dmstory.cn/ddm/math"
)
func main() { //大括号只能位于这一行
//调用fmt包函数
fmt.Println("Hello World!")
/*
简短变量声明,只能出现在函数内部。
类型根据表达式推导
*/
n1 := 5
n2 := 3
//调用mymath包函数
fmt.Printf("%d + %d = %d\n", n1, n2, mymath.Add(n1, n2))
fmt.Printf("%d - %d = %d\n", n1, n2, mymath.Substract(n1, n2))
//调用greet包函数
greet.SayHi()
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//add.go,其他同理
/*
定义这份代码属于math包
*/
package math
/*
定义包当中的方法,方法名是大写表示该方法是导出的,即可以被外部访问
*/
func Add(a, b int) int {
return a + b
}
|