Go语言中共有25个关键字
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
预定义名称列表
// 内建常量
true false iota nil
// 内建类型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
// 内建函数
make len cap new append copy close delete
complex real imag
panic recover
示例Demo
在以下Go语言示例代码中,主要由三部分包含组成:
第一部分导入包名,默认为 main ;
第二部分导入标准库;
第三部分 main函数定义,在go语言中,代码如果需要跑起来,代码必须要有main函数作为入口。
习惯上,Go语言程序员推荐使用 驼峰式 命名,当名字由几个单词组成时优先使用大小写分隔,而不是优先用下划线分隔。
import
导入标准库或第三方库
(
import "fmt"
)
声明、赋值
Go语言主要有四种类型的声明语句:var、const、type 和 func,分别对应变量、常量、类型和函数实体对象的声明。
var
var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。
变量声明的一般语法:
// var 变量名字 类型 = 表达式
var name string = "aaa"
数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
也可以在一个声明语句中同时声明一组变量,或用一组初始化表达式声明并初始化一组变量。
var i, j, k int // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string
一组变量也可以通过调用一个函数,由函数返回的多个返回值初始化
var f, err = os.Open(name)
定义字符串数组语法
var strArrar1 []string // 声明类型为string数组
var strArrar2 []string{"a", "b"} // 并初始化值
const
常量表达式的值在编译期计算,而不是在运行期。每种常量的潜在类型都是基础类型:boolean、string或数字。 常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。
// 声明
const num = 10
type
新命名的类型,用来分割不同概念的类型,这样即使它们底层类型相同也不是兼容的
// type 类型名字 底层类型
type Num float64
类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在包外部也可以使用。
func
函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。
func name(param) (result) {
// body
}
函数传参,返回值 float64类型
func hypot(x, y float64) float64 {
return math.Sqrt(x*x + y*y)
}
引用类型
map
介绍
哈希表是一种巧妙并且实用的数据结构。 它是一个无序的key/value键值对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。
在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是key和value之间可以是不同的数据类型。其中K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。
map类型的零值是nil, 也就是没有引用任何哈希表。
使用
使用内建make函数创建一个map
ages := make(map[string]int)
可以用map字面值的语法创建map,同时还赋值key/value
ages := map[string]int{"age1": 18, "age2": 19}
另一种创建空的Map表达式
ages := map[string]int{}
Map中元素通过key下标语法访问
ages["age1"] = 18
fmt.Println(ages["age1"])
使用内建delete函数可以删除元素
delete(ages, "age1") // 即使某些元素不在map中也没有关系,失败时将返回0。
遍历map中全部的key/value对的话,可以使用range风格的for循环实现
for name, age := range ages {
fmt.Printf("%s\t%d\n", name, age)
}
Go语言的语法简洁明了。它的变量声明方式简洁,不像其他一些语言有复杂的类型修饰。在运行效率上也表现出色。执行速度快。在处理大规模数据或者高并发场景时,能够高效地利用系统资源。 学习Go语言基础后,对并发编程模型印象深刻。Go语言中的协程(goroutine)和通道(channel)是处理并发的有力工具。可以轻松创建成千上万个协程而不会给系统带来过大的负担。通道则为协程之间的通信提供了安全可靠的方式,避免了共享内存带来的并发安全问题。