Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
变量定义
作为静态类型语言,go变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变类型。
var关键字定义
关键字var用于定义变量,和C不同,类型被放在变量后面。若显式提供初始值,可省略变量类型,由编译器推断。
var X int // 自动初始化为零
var y = false // 自动推断为bool的类型
可一次性定义多个变量,类型可相同也可不相同。
var x,y int
var a,b = 100, "abc"
简短模式
变量定义时,除var关键字外,还可使用更加简短的变量定义和初始化语法。
package main
import "fmt"
func main() {
x := 10 // 使用 := 进行定义并初始化
fmt.Println(x) // 输出语句 10
函数
函数就是将复杂的算法过程分解为若干较小任务,进行拆分,易于维护。函数被设计成相对独立,通过接收输入参数完成一段算法指令,输出或存储相关结果。因此,函数还是代码复用和测试的基本单元。
关键字func用于定义函数。
package main
import "fmt"
// 定义 Write函数 返回值有两个,一个为name,一个age为
func Write() (name string, age int) {
return "迈莫coding", 1
}
// 定义 Read函数
func Read(name string, age int) {
fmt.Println(name, " 已经 ", age, " 岁了")
}
func main() {
Read(Write()) // 迈莫coding 已经 1 岁
切片
切片(slice)本身不是动态数组或动态指针。只是它内部采用数组存储数据,当数组长度达到数组容量时,会进行动态扩容。
大白话就是切片功能和Java中的List集合类似,动态添加数据。不像数组(array)长度是固定的,需要事先知道数据长度。
初始化slice
x := make([]int, 1) // 通过make关键字进行slice初始化
map字典
map字典也是使用频率比较高的数据结构。将其作为语言内置类型,从运行时层面进行优化,可获得更高效类型。
作为无序键值对集合,字典key值必须是支持相等运算符的数据类型,比如数字、字符串、指针、数组、结构体,以及对应接口类型。
map字典功能和Java中的map集合功能类似。
字典是应用类型,使用make函数或初始化表达语句来创建。
package main
import "fmt"
func main() {
// 定义 变量strMap
var strMap map[int]string
// 进行初始化
strMap = make(map[int]string)
// 给map 赋值
for i := 0; i < 5; i++ {
strMap[i] = "迈莫coding"
}
// 打印出map值
for k, v := range strMap{
fmt.Println(k, ":", v)
}
// 打印出map 长度
fmt.Println(len(strMap))