1.什么是go
go语言是一门并发支持、垃圾回收的编译型系统编程语言旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。
2.go的主要特点
- 类型安全和内存安全
- 以非常直观和极低代价的方案实现高并发
- 高效的垃圾回收机制
- 快速编译(同时解决C语言中头文件太多的问题)
- 为多核计算机提供性能提升的方案
- UTF-8编码支持
3.Ubuntu下go环境搭建
3.1 下载并解压符合操作系统的二进制源码包
在这里选择合适的包并下载:https://golang.org/dl/
wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz
sudo tar -C /usr/local/ -zxvf go1.14.3.linux-amd64.tar.gz
3.2 设置环境变量
sudo vim /etc/profile
添加以下文件:
export GOROOT="/usr/local/go"
export PATH=$GOROOT/bin:$PATH
export GOPATH=/home/ljr/go
- GOROOT:表示go在电脑上的安装位置,如我的go安装位置在
/usr/local/go
,我在配置文件中对应配置GOROOT=/usr/local/go
。 - PATH:保证配置可以在任何地方调用需要在PATH环境变量上添加go的路径。
- GOPATH:一个保存工作目录的环境变量,可以设置多个工作目录。
设置完成后,重启Ubuntu生效,或使用此命令立即生效:
source /etc/profile
此时可输入以下命令来检查go的环境变量:
go env
env
在终端输入go可以查看帮助:
4.go 语言 HelloWorld
按照go开发规范,GOPATH目录下的每个工作一般分为三个子目录:src,pkg,bin。
- src——里面每一个子目录,就是一个包,包内是Go的源码文件;
- pkg——编译后生成的,包的目标文件;
- bin——生成的可执行文件。
4.1编写第一个程序
在src目录下创建一个文件夹叫hello,在该目录下创建一个文件叫hello.go,用vim输入以下内容:
package main
import "fmt"
func main() {
println("Hello", "world")
}
程序解读:
4.1.1 package
- 在同一个包下面的文件属于同一个工程文件,不用import包,可以直接使用;
- 在同一个包下面的所有文件的package名,都是一样的;
- 在同一个包下面的文件package名都建议设为是该目录名,但也可以不是。
4.1.2 import
import “fmt” 告诉 go 编译器这个程序需要使用 fmt 包的函数,fmt 包实现了格式化 IO(输入/输出)的函数,可以是相对路径也可以是绝对路径,推荐使用绝对路径(起始于工程根目录)。
- 点操作:我们有时候会看到如下的方式导入包
import(
. "fmt"
)
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println("hello world")
可以省略的写成Println("hello world")
。
- 别名操作:别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字
import(
f "fmt"
)
别名操作的话调用包函数时前缀变成了我们的前缀,即f.Println("hello world")
。
- _操作:请看下面这个import
import (
"database/sql"
_ "xxx"
)
_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数
4.1.3 main
main()是程序运行的入口。
4.1.4 Go中的保留字
这些保留字不能用作常量或变量或任何其他标识符名称。
4.2 执行go程序
方式一:使用go run命令
可以看到go编译中检查到程序中没有用到“fmt”包,验证了go语言快速编译的特点,我们改下程序,去掉import “fmt”,然后运行:
可以看到得出了预期的结果。
方式二:使用go build命令
打开终端:在任意文件路径下,运行:
go install hello
或进入项目(应用包)的路径,然后运行:
go install
在编译生成go程序时,go实际上会去两个地方找程序包:GOROOT下的src文件夹下和GOPATH下的src文件夹下。在程序包里,自动找main包的main函数作为程序入口,然后进行编译。在/home/ljr/go/bin/
下(如果之前没有bin目录则会自动创建),会发现出现了一个hello的可执行文件,运行结果如下: