万物之始,大道至简,演化至繁,一切复杂的软件都是由基本的程序排列组合来的。
第一章 基础知识
1.1 Go语言简介
Go语言主要是为了解决当前其他编程语言对并发支持不友好、编译速度慢、编程复杂的问题而诞生的,因为是后来设计的,比目前主流的编程语言历史都短,因此也借鉴了其他编程语言的优秀经验,同时也避免了很多缺点。
1.2 第一个Go程序
基本上每个语言第一个程序都是hello world,Go语言的hello world如下
例1.1 hello world
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
结果:
hello world
Hello world程序解读:
第一行package main定义了一个包,包名是main,main是可执行程序的包名,所有的Go程序文件头部必须有一个包声明语句,Go通过包来管理命名空间
第3行import "fmt" 表示引用一个外部包fmt,这里可以引用标准库的包,也可以是第三方包或者自定义的包
第5行使用func关键字声明定义了一个函数,函数名为main,main代表Go程序入口函数
Go代码的特征:
源程序以.go为后缀
默认为UTF-8编码
标识符区分大小写
语句结尾的分号可以省略,也可以加(这点感觉设计的不好,不应该提供两种选择让用户选择,直接规定一种格式更好,让用户选择反而会导致代码风格不同)
main函数所在的包名必须是main
编译运行
go编译命令为go build xxxx.go,运行命令为./xxxx,如下例所示:
//go build test2.go 为编译命令
bytedance@C02D31DRML85 awesomeProject12 % go build test2.go
//./test2 为运行命令
bytedance@C02D31DRML85 awesomeProject12 % ./test2
hello world
1.3 词法单元
-
这块和其他编程语言基本类似,go的标识符也是必须以字母或下划线开头,后面可以跟任意个字符、数字、下划线,且区分大小写
-
Go有25个关键字,相比Java少了很多,在定义变量/常量等的时候,要避开关键字,否则会出问题
-
Go的操作符和其他编程语言也大同小异,基本都是算术运算符、位运算符、赋值运算符、比较运算符、逻辑运算符那些
1.4 变量和常量
高级语言通过一个标识符来绑定一块特定的内存,后续对这块特定的内存的操作都可以使用该标识符来代替,这类绑定了某个存储单元的标识符可分为变量和常量,变量表示指向的内存可以被修改,而常量表示指向的内存不能被修改。
1.4.1 变量
Go的基本类型变量声明有三种方式,如下例所示:
例1.1 变量的声明方式
package main
import (
"fmt"
)
func main() {
var a = 4 //变量声明方式1
var b int = 5 //变量声明方式2
c := 6 //变量声明方式3,Go编译器会自动进行数据类型推断
fmt.Println("a = ", a)
fmt.Println("b = ", b)
fmt.Println("c = ", c)
}
Go语言提供自动内存管理,通常情况下程序员不需要特别关注变量的生存期和存放位置
例1.2 同时声明多个变量
package main
import (
"fmt"
)
func main(){
var (
a string
b int
c bool
)
a = "adb"
b = 124
c = true
fmt.Println("a = ",a)
fmt.Println("b = ",b)
fmt.Println("c = ",c)
}
1.4.2 常量
常量使用一个名称来绑定一块内存地址,该地址里存放的内容不可以改变,使用关键字const来声明常量,如下例所示:
例1.3
package main
import (
"fmt"
)
func main(){
const (
a = 23
b = 23332
c = "233"
)
fmt.Println("a = ",a)
fmt.Println("b = ",b)
fmt.Println("c = ",c)
}
iota关键字:
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举