Golang的诞生之初 Go从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器码的运行效率以及和现有操作系统的无缝适配,但号称为了简洁性、统一性和可读性,统一限制一些代码写法,比如if、for语句,统一去除掉括号,而且{}必须接着条件判断语句开始,不能换行。
变量声明
与C、C++、Java等不同,go的变量声明一般是var+变量名+type,类型后置;也有使用类型推导,直接对变量赋值,编译器会推导其类型。结构体则是type+变量名+struct。 另外,go通过对首字母是否大写来允许是否允许别的包直接引用。对于首字母大写的变量、函数,别的程序引包时可以直接调用,否则需要工厂模式。
interface{}和method
在函数声明时,在其名字之前放上一个变量,即是一个方法。接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的实例。一个具体类型必须是实现接口包含的所有方法才算是接口类型实例。
//结构体
type Me struct{
Name string
}
//method 通过a结构体变量去调用
func (a Me)Print(){
fmt.Printf("%v你怎么睡得着的?!",a.Name)
}
//接口
type study interface{
print()
}
//a实现了study接口的所有方法,所以它是一个接口类型的实例
slice
切片,是对数组类型的一个衍生。因为切片是指针,指向底层的一个数组,指针是需要对其初始化,否则就是野指针,不make()初始化,无法直接对其进行赋值,需要用append、copy等函数进行间接使用。通过性能分析课程了解到另一个隐藏点:对slice初始化make时,预分配空间大小对其性能有很大影响。map也是类似