最近写了不少Go代码,但是写着写着,还是容易忘,尤其是再写点Python代码后。所以找了一篇不错的Golang基础教程,翻译一下,时常看看。
原文链接: 「Learning Go — from zero to hero」 by Milap Neupane
开始
Go是由各种 包 组成的。main包是程序的入口,由它告诉编译器,这是一个可执行程序,而不是共享包。main包定义如下:
package main
工作区
Go的工作区是由环境变量GOPATH
决定的。
你可以在工作区里随心所欲地写代码,Go会在GOPATH
或者GOROOT
目录下搜索包。注:GOROOT
是Go的安装路径。
设置GOPATH
为你想要的目录:
# export 环境变量
export GOPATH=~/workspace
# 进入工作区目录
cd ~/workspace
在工作区目录里创建mian.go
文件。
package main
import (
"fmt"
)
func main(){
fmt.Println("Hello World!")
}
我们使用import
关键字来引入一个包。func main
是执行代码的入口,fmt是Go的内置包,主要用来格式化输入/输出。而Println是fnt中的一个打印函数。
想要运行Go程序,有两种方法。
方法一
大家都知道,Go是一门编译型语言,所以在执行之前,我们需要先编译它。
> go build main.go
这个命令会生成二进制可执行文件 main,然后我们再运行它。
> ./main
# Hello World!
方法二
一个go run
命令就可以搞定。
go run main.go
# Hello World!
注意:你可以在这个网站执行本文中的代码。
变量
Go中的变量都是显式声明的。Go是静态语言,因此声明变量时,就会去检查变量的类型。
变量声明有以下三种方式。
# 1) a的默认值为0
var a int
# 2) 声明并初始化a,a自动赋值为int
var a = 1
# 3) 简写声明
message := "hello world"
还可以在一行声明多个变量
var b, c int = 2, 3
数据类型
数字,字符串 和 布尔型
Go 支持的数字存储类型有很多,比如 int
, int8
, int16
, int32
, int64
,uint
, uint8
, uint16
, uint32
, uint64
, uintptr
等等。
字符串类型存储一个字节序列。使用string
关键字来声明。
布尔型使用bool
声明。
Go还支持复数类型数据类型,可以使用complex64
和complex128
进行声明。
var a bool = true
var b int = 1
var c string = 'hello world'
var d float32 = 1.222
var x complex128 = cmplx.Sqrt(-5 + 12i)
数组, 分片 和 映射Map
数组是包含同一数据类型的元素序列,在声明时确定数组长度,因此不能随意扩展。
数组的声明方式如下:
var a [5]int
多维数组的声明方式如下:
var multiD [2][3]int
Go中的数组有一定限制,比如不能修改数组长度、不能添加元素、不能获取子数组。这时候,更适合使用slice[分片]
这一类型。
分片用于存储一组元素,允许随时扩展其长度。分片的声明类似数组,只是去掉了长度声明。
var b []int
这行代码会创建一个 0容量、0长度的分片。也可以使用以下代码 设置分片的容量和长度。
// 初始化一个长度为5,容量为10的分片
numbers := make([]int,5,10)
实际上,分片是对数组的抽象。分片使用数组作为底层结构。一个分片由三部分组成:容量、长度和指向底层数组的指针。
![47395f73005eaf04497c4202ff5ff16f.png](https://i-blog.csdnimg.cn/blog_migrate/7b8e71d8c656f64ad3eaeaadb7f31862.png)
使用append
或者copy
方法可以扩大分片的容量。append
方法在分片的末尾追加元素,必要时会扩大分片容量。
numbers = append(numbers, 1, 2, 3, 4)
还可以使用copy
方法来扩大容量。
// 创建一个更大容量的分片
numb