Let's Go 1

Go

Go语言简介

Go是谷歌2009发布的第二款开源编程语言。Go语言学习曲线平缓,非常容易上手,而且它能够在不降低开发效率的情况下保证代码运行速度。Go语言是一门编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型语言的安全性。

Go语言的主要特性有:

  • 自动垃圾回收

  • 更丰富的内置类型

  • 函数多返回值

  • 错误处理

  • 匿名函数和闭包

  • 类型和接口

  • 并发编程

  • 反射

  • 语言交互性

  • etc.

Go 的常用库

参考:Go语言标准库

  • net/http:提供了HTTP客户端和服务端的实现

  • html/template:提供了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容

  • text/template:提供了数据驱动的模板,用于生成可防止代码注入的安全的文本内容

  • regexp:提供了正则表达式的实现

  • database/sql:提供了通用的接口,用于操作SQL数据库

  • testing:提供了对Go包的自动化测试的支持

  • go/types:提供了对Go包的类型安全的类型检查

  • go/ast:提供了对Go包的抽象语法树的操作

  • go/parser:提供了对Go源代码的解析

  • go/token:提供了对Go源代码的词法分析

  • go/doc:提供了对Go源代码的文档提取

  • etc.

Go 能做什么

  • 网络编程

  • 并发编程

  • 分布式系统

  • etc.

Go 的安装

我使用的是 Windows 操作系统,所以这里只介绍 Windows 下的安装方法。

官方下载地址https://golang.org/dl/
国内下载地址https://golang.google.cn/dl/
Go 中文网下载地址https://studygolang.com/dl

下载完成后,双击安装包,一路 Next 即可。

安装完成后,打开命令行,输入 go version,如果能够看到类似 go version go1.xx.xx windows/amd64 的输出,说明安装成功。

Go 的环境变量

Go 的环境变量有三个:

  • GOROOT:Go 的安装目录

  • GOPATH:Go 的工作目录

  • GOBIN:Go 的可执行文件目录

GOROOT

GOROOT 是 Go 的安装目录,安装完成后,GOROOT 会自动添加到环境变量中,如果没有添加,可以手动添加。

GOPATH

GOPATH 是 Go 的工作目录,Go 的工作目录可以有多个,但是一般只设置一个。

GOPATH 的目录结构如下:

1
2
3
4
GOPATH
├── bin
├── pkg
└── src
  • bin:存放可执行文件

  • pkg:存放编译后的包文件

  • src:存放源代码

GOBIN

GOBIN 是 Go 的可执行文件目录,一般情况下,GOBIN 的值为 $GOPATH/bin

设置环境变量

在 Windows 系统中,可以通过以下方式设置环境变量:

  • 右键点击“我的电脑”,选择“属性”,在弹出的窗口中选择“高级系统设置”,在弹出的窗口中选择“环境变量”,在弹出的窗口中选择“新建”,在弹出的窗口中输入变量名和变量值,点击“确定”即可。

  • 在命令行中输入 set GOPATH=xxx,xxx 为 GOPATH 的值。

开发工具

IDE

  • GoLand:GoLand 是 JetBrains 推出的一款 Go 语言 IDE,功能强大,但是收费。

Go Playground

  • The Go Playground

  • Better Go Playground

Editor

  • Visual Studio Code:VS Code 是微软推出的一款轻量级的代码编辑器,功能强大,支持插件扩展,支持 Go 语言开发。

初学者推荐使用 Go Playground,熟悉了 Go 语言的语法后,推荐使用 VS Code/GoLand。

Hello World

创建一个名为 hello.go 的文件,输入以下内容:

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}

在命令行中输入 go run hello.go,如果能够看到 Hello, World! 的输出,说明安装成功。

基本语法

注释

Go 语言支持单行注释和多行注释。

1
2
3
4
5
6
7
// 单行注释

/*
多行注释
多行注释
多行注释
*/

标识符

Go 语言中的标识符用来命名变量、类型等程序实体。标识符由字母、数字、下划线组成,但是第一个字符不能是数字。Go 语言中的标识符严格区分大小写。

关键字

Go 语言中有 25 个关键字:

1
2
3
4
5
break        default      func         interface    select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

变量

Go 语言中的变量声明格式为:

1
var 变量名 变量类型

例如:

1
2
3
var a int
var b string
var c bool

Go 语言中的变量声明格式为:

1
var 变量名 = 值

例如:

1
2
3
var a = 1
var b = "hello"
var c = true

Go 语言中的变量声明格式为:

1
var 变量名1, 变量名2, 变量名3 = 值1, 值2, 值3

例如:

1
var a, b, c = 1, "hello", true

Go 语言中的变量声明格式为:

1
变量名 := 值

例如:

1
2
3
a := 1
b := "hello"
c := true

上面的例子中,Go 语言会根据变量的值自动推断变量的类型。

命名规范

  • 变量名由字母、数字、下划线组成,但是第一个字符不能是数字。

  • 变量名严格区分大小写。

  • 变量名不能包含空格。

  • 变量名不能以数字开头。

  • 变量名不能使用 Go 语言的关键字。

  • 变量名不能使用 Go 语言的内置函数名。

驼峰命名法

示范:

1
2
3
4
5
6
var myName string
var myAge int
var myHeight float64

var isOk bool
var hasError bool

其他操作

打印内存地址

1
fmt.Printf("%p\n", &a)

交换变量的值

1
a, b = b, a

空白标识符

1
_, b = b, a

多重赋值

1
a, b, c = 1, "hello", true

变量的作用域

1
2
3
4
5
6
7
8
9
10
11
var a = 1

func main() {
var b = 2
fmt.Println(a, b)
}

func test() {
var c = 3
fmt.Println(a, c)
}

全局变量

1
2
3
4
5
6
7
8
9
var a = 1

func main() {
fmt.Println(a)
}

func test() {
fmt.Println(a)
}

匿名变量

1
2
3
4
5
6
7
8
func main() {
a, _ := test()
fmt.Println(a)
}

func test() (int, int) {
return 1, 2
}

常量

Go 语言中的常量声明格式为:

1
const 常量名 = 值

例如:

1
2
3
const a = 1
const b = "hello"
const c = true

常量 iota

Go 语言中的常量 iota 是一个自增的枚举值,从 0 开始。

1
2
3
4
5
const (
a = iota
b
c
)

iota 的使用

1
2
3
4
5
const (
a = 1 << iota
b
c
)

输出:

1
2
3
1
2
4

数据类型

Go 语言中的数据类型有:

  • 布尔型:bool

  • 数字类型:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr、float32、float64、complex64、complex128、byte、rune

  • 字符串:string

  • 派生类型:指针、数组、结构体、Channel、函数、切片、接口、Map

数据类型的转换

Go 语言中的数据类型转换格式为:

1
变量名 := 数据类型(表达式)

例如:

1
2
var a = 1
var b = float64(a)