废话
自从学习完go基础以后不知道何去何从了。由于是纯粹的自学并且没有任何项目需求,学好一门编程语言确实很难。为了摆脱从入门到放弃的魔咒,以下的日子里准备在班余时间自学完标准库,为以后实战铺好路子。(目前实战一脸懵逼,啥库都不会用)
学习go标准库首先从builtin包开始,这个包顾名思义就是内置包不需要引入,提到 len()
可能你多少就懂一点了。说白了就是预先声明的标识符。
说明: 文中提到带Type的类型都只是说明而已,go语言中并没有此种类型
常量
const (
true = 0 == 0
false = 0 != 0
)
//true false 其实就是go内置的常量
const iota = 0
//iota表示const()中规范的常量的无类型整数序列,他是零索引的(0开始)这里重点讲一哈iota。
const (
a = iota
)
//a的值就是零
const (
a = 5
b = iota
)
//b的值就是1
//在const()中第几个常量,iota就是表示这个位置的索引。有时候写一个枚举类型的常量组的时候特别有用
const(
ContentTypeLeft = iota
ContentTypeRight
ContentTypeTop
ContentTypeBottom
)
//值分别是0 1 2 3,忘了说了const中不指定值就是上一个值。
变量
var nil Type
//Type必须为pointer, channel, func, interface, map or slice.
//基本包括了go的所有引用类型。
方法
func append
Tips: 墙了再点,墙可以密我
追加元素到切片末尾,如果切片的容量够,会重切来容纳元素,如果不够会重新分配新的底层数组,返回更新过的切片,所以必须保存返回的切片,最好直接更新原变量。
func append(slice []Type, elems ...Type) []Type
// elems是可变长参数
slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)
func cap
计算某些类型的容量
func cap(v Type) int //Type只支持以下几个类型
//Array: 元素数量
//Pointer to array: 指针指向的数组的元素数量
//Slice: 切片的最大容量
//Channel: 信道 buffer 容量
func close
关闭信道
func close(c chan<- Type)
这个方法只能关闭双向或者单发送信道,只能发送数据到信道的时候使用。如果一个关闭的信道所有数据都被消化了,继续接受数据是不会堵塞协程的,只会返回一个空值。这样在数据接受方面有利于我们判断信道中是否还有数据。如果我们尝试获取消化完的信道的数据,协程就会被堵塞而报错,所有推荐大家使用这个方法。
data, ok := <-c // ok表示是否还有数据bool
func complex
创建复数
func complex(r, i FloatType) ComplexType //不多说了
func copy
复制切片
func copy(dst, src []Type) int //只会复制dst和src最小的个数
//例子
src := []int{3,4}
dst := []int{1}
n := copy(dst, src) //n为1 dst是[3] 叠加复制
func delete
删除字典中的元素,无返回值
func delete(m map[Type]Type1, key Type) //如果没有这个key,空操作。
func imag
返回复数中的虚部
func imag(c ComplexType) FloatType //只返回值 不带i
func len
返回特定类型的长度
func len(v Type) int
//Array: 数组长度
//Pointer to array: 数组长度
//Slice, or map: 切片,字典长度
//String: 字符中bytes的长度 (汉子代表3个)
//Channel: 信道中缓存的长度(肯定是未消化的)
func make
分配和初始化slice,map,chan
func make(t Type, size ...IntegerType) Type
//这边是返回Type的值
//为什么用可变参数呢 给切片用的 设计比较巧妙
//Slice: make([]int, 0, 10) 第一个是长度,第二个是容量
//Map: size是长度
//Channel: size是缓存的长度,不给值就是无缓存的信道
func new
分配内存,返回特定类型的空值的指针
func new(Type) *Type //最好用make,结构类型的直接用结构来初始化
func panic
结束当前协程的运行
func panic(v interface{}) //无任何返回值
当方法F调用到panic,F立即停止运行(defer方法正常运行)如果F被G方法调用,就继续调用G的defer,这个终止序列可以被recover方法控制。
func print
打印调试信息
func print(args ...Type)
func println
打印调试信息(跟print的区别就是参数之间有空格,结尾有换行)
func println(args ...Type)
func real
返回复数的实部
func real(c ComplexType) FloatType
func recover
从错误中恢复,并返回错误
func recover() interface{}
//返回值为panic的参数
type
type uintptr
uintptr是一个足以容纳任何指针的位模式的整数类型。
type error
type error interface {
Error() string
}
//这是个接口类型,大多时候都是调用或者是支持
type byte
byte是uint8的别称
type rune
int32的别称,按照惯例,这个值是为了区别character 值和int值的,可以表示的字符多于byte能表示的字符
type string
字符串是8位字节的所有字符串的集合,通常但不一定表示UTF-8编码的文本。 一个字符串可能是空的,但不是零。 字符串类型的值是不可变的。
结束语: 其余的数据类型大家可以自己查看,没什么特别的,我就不多记录了。