型。
ABC,A为最完整的写法,指明了变量名,类型,初始值;B是简写法,没有指定变量类型,不过go提供了类型推断,其会根据初始值推断类型;C是快速模式,通过":="快速创建一个变量。
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
在影响软件系统稳定性的因素里,我们最担心的一个问题是内存泄漏,随着系统的运行,系统消耗的内存越来越多,直到最后整个操作系统越来越慢,甚至还会导致系统崩溃。在Go语言里,我们检测内存泄漏主要依靠的是go里面的
pprof包,除此之外,我们还可以使用浏览器来查看系统的实时内存信息(包括CPU、goroutine等的信息。
实现接口时,不需要提前导入,都是隐式默认的。
- init函数可以在任何包中有0个或1个或多个;
- 首先初始化导入包的变量和常量,然后执行init函数,最后初始化本包的变量和常量,然后是init函数,最后是main函数;
- main函数只能在main包中有且只有一个,main包中也可以有0或1或多个init函数;
- init函数和main函数都不能被显示调用;
Go语言中只有for循环。for后面的语句中不能有逗号分割的语句,各个语句必须都是平等的,使用分号分割。for后面可以有无数多个分号。
go语言中的++、--操作符都是后置操作符,必须跟在操作数后面,并且它们没有返回值,所以它们不能用于表达式。
D中add会把数组中元素转成int值变成多个参数。
一个类实现了一个接口中的所有方法,那么它就实现了这个类。可以用这个类的对象来初始化一个接口。通过接口可以实现多态,类似C++虚函数重载。
Make只用来创建slice,map,channel,其中map使用前必须初始化。append可直接动态扩容slice,而map不行。
map在使用前必须初始化。
var m map[string]int = make(map[string]int)
m["one"] = 1
//这样可以;
var m map[string]int = map[string]int{"two", 2}
m["one"] = 1
//这样也可以;
var m map[string]int
m["one"] = 1
//这样就不行。
main函数和init函数都没有参数和返回值的定义。
递归检测:go tool vet package1 package2。因此——go tool vet 才可以递归。
Golang中大多数数据类型都可以转化为有效的JSON文本,除了channel、complex、函数等。
Go语言中的引用类型只有五个:切片 映射 函数 方法 通道。
nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果将nil赋值给其他变量的时候将会引发panic。
三、参考资料
GoConvey_初步认识
golang语言反射三定律
匿名函数_Go语言圣经
GoConvey框架使用指南
go vet与go tool vet_极客学院
如果你用Go,不要忘了vet
vet 命令
go vet 学习笔记
Golang 序列化方式及对比
四、总结
本次练习把牛客网最后的34道Go语言练习题全部搞完了。涉及构造函数、GoConvey框架、反射、vet指令、序列化、main函数概念、错误设计、init函数、add函数、接口、匿名函数、Cgo、defer表达式等。
不断迭代,不断更新,不断尝试并不断进步。
后期将着重学习Go语言的框架和项目实践学习。