青训营笔记1 - GO基础语法
这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
前言
本人有一点语言基础,本笔记只记录一些本人认为相对重要和易忘易错易混淆的知识点,仅供分享参考,勿喷。
GO介绍
Go 是一门高性能,高并发,语法简单,学习曲线平缓的强类型和静态类型语言,其拥有丰富的标准库,完善的工具链,支持快速编译,跨平台且支持垃圾回收(GC) ;
由于本人学过一点Java,相较Java而比,Go是一个运行性能更佳的语言,国内外多家大厂开始用go来构造工具来优化性能,将来go也极可能成为主流语言,学习就是十分有必要的。
go基础语法相关知识点
IDE
Goland
变量
变量类型后置,可让语言自动推断。var x=1 int
go语言每句话没有分号分开
i := 1
复制代码
i快速声明初始化。
流程控制
基本和其他语言大差不差,但又有自己独特的特点,只要记住相关特点即可。
没有while只有for,可用for+bool来实现类似while的用法
切片
因为数组多是定长的,所以使用时多用切片来代替。切片(slice)某个数组或集合的一部分,切片是可变容量的,其工作原理类似于 Java 的 ArrayList,当切片容量不足时,便会自动扩容然后返回一个新的切片给我们。
s := make([]string, 3)
复制代码
声明一个切片S.
切片的 长度(length) 和 容量(capacity) 是两个完全不同的东西,前者才是切片实际的长度,后者则是一个阈值,当切片长度达到该阈值时才会对切片进行扩容。
当然,也可以直接指定一个切片的长度和容量:
s2 := make([]string, 0, 10)
复制代码
用append方法来添加(有点类似StringBuffer或StringBuilder),也可像数组一样访问s[i].
还有copy方法。 映射(Map)是一个无序 1 对 1 键值对。可以使用如下方式声明一个 Map:
m := make(map[string]int)
复制代码
复制代码
声明了一个键(key)为 string 类型,值(value)为 int 类型的 Map。
当然,也可以提前初始化 Map 内的值:
m2 := map[string]int{"one" : 1, "two" : 2}
复制代码
复制代码
可以使用类似于数组和切片的赋值语法为 Map 赋值,只不过,将索引换成了 key,目标值换为了 value:
m["one"] = 1
m["two"] = 2
复制代码
这里感觉用起来相较Java更加便捷,有点类似python的用法。 Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
复制代码
以上代码中的 key 和 value 是可以省略。
如果只想读取 key,格式如下:
for key := range oldMap
复制代码
或者这样:
for key, _ := range oldMap
如果只想读取 value,格式如下:
for _, value := range oldMap
复制代码
Go 错误处理
如果返回的值错误对象为 nil,则代表没有发生错误,函数正常执行。 要实现此功能,需要导入 errors 包:
import (
"errors"
)
复制代码
复制代码
声明函数:
func findUser(users []user, name string) (v *user, err error){
for _,u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}
复制代码
其他
GO支持函数,指针,结构体,类似于C++和C。