使用:=这个符号。使用了这个符号之后,开发者不再需要写var关键字,只需要定义变量名,并在后面进行赋值即可。并且,Golang编译器会根据后面的值的类型,自动推导出变量的类型。
go 语法:1, 区分大小写
标识符为(下划线)的变量,是系统保留的匿名变量,在赋值后,会被立即释放,称之为匿名变量。其作用是变量占位符,对其变量赋值结构。通常会在批量赋值时使用。
例如,函数返回多个值,我们仅仅需要其中部分,则不需要的使用来占位
在Golang的常量定义中,使用const关键字,并且不能使用:=标识符。
判断:
在Golang中,唯一的不同是不需要小括号,但是大括号还是必须的
循环:
和判断语句一样,在Golang中也是没有小括号的。
此外,在循环条件中,初始化语句和后置语句是可选的,这个时候把分号去掉,for循环就变成了while循环。
函数:
在Golang的函数定义中,所有的函数都以func开头,并且Golang命名推荐使用驼峰命名法。
注意,在Golang的函数中,如果首字母是小写,则只能在包内使用;如果首字母是大写,则可以在包外被引入使用。可以理解为,使用小写的函数,是private
的,使用大写的函数,是public
的。
Golang中的函数可以返回任意多个返回值。
defer 语句会将函数推迟到外层函数返回之后执行。 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。
指针:
在Golang中,指针的用法和 C 是一样的。同样是用&取地址,用*取地址中的值。
数组:
var a [10]int
注意,在Golang中,数组的大小也同样和 C 语言一样不能改变
切片:
数组的切片,顾名思义,就是将一个数组按需切出自己所需的部分。
每个数组的大小都是固定的。而切片则为数组元素提供动态大小的、灵活的视角。在实践中,切片比数组更常用。
这是因为,Golang中的切片,不是拷贝,而是定义了新的指针,指向了原来数组所在的内存空间。所以,修改了切片数组的值,也就相应的修改了原数组的值了。
此外,切片可以用append增加元素。但是,如果此时底层数组容量不够,此时切片将会指向一个重新分配空间后进行拷贝的数组。
因此可以得出结论:
切片并不存储任何数据,它只是描述了底层数组中的一段。
更改切片的元素会修改其底层数组中对应的元素。
与它共享底层数组的切片都会观测到这些修改。
make:
切片可以用内建函数 make 来创建,这也是你创建动态数组的方式。
make 函数会分配一个元素为零值的数组并返回一个引用了它的切片:
结构体:
而在Golang中,则没有对象这一说法,因为Golang是一个面向过程的语言。但是,我们又知道面向对象在开发中的便捷性,所以我们在Golang中有了结构体这一类型。
方法:
也就是说,只有指针接收者类型的方法,才能修改这个接收器的成员值,非指针接收者,方法修改的只是这个传入的指针接收者的一个拷贝
接口:
这一部分和结构体的定义很相似,但是里面的元素换成了函数,但是这个函数不需要func关键字。这里和Java中的接口相似,不需要访问修饰符,只需要函数名参数返回类型。
定义完接口之后,我们需要定义方法去实现这些接口。注意,这里新定义方法的方法名,参数,返回类型,必须和接口中所定义的完全一致。
线程与协程:
简单来说,进程和线程是由操作系统进行调度的,协程是对内核透明,由程序自己调度的。不仅如此,Golang的协程所占用的内存空间极小,也就是说,协程更加的轻量。此外,协程的切换一般由程序员在代码中显式控制,而不是交给操作系统去调度。它避免了上下文切换时的额外耗费,兼顾了多线程的优点,简化了高并发程序的复杂。
至于别的,本文不进行深入的研究,本文的基调还是以入门为主,即怎么去用。
goroutine:
简单来说,我们所编写的Golang源代码全部都跑在goroutine中。
我们只需要使用go关键字,就可以启动一个goroutine。
select:
select关键字用在有多个信道的情况下。
他的目的是为了提高系统的效率,而不至于在某一个信道阻塞的情况下,不知道该干什么。
select中会有case代码块,用于发送或接收数据。