Golang:
1: 可以直接与C语言兼容;
同一个Go文件中,C语言相关部分必须注释编译;
一般可以建立 h 和(或) c文件,编写C语言相关部分,然include相关h文件,include也必须注释;
但是,Go 指针与 C指针不兼容通用;
2:与 C++ 部分,C++部分必须编译成相关库文件,然后通过 C 调用;
3: goroutine,相当于线程,通过 go 调用相关函数;
一般可以通过 sync.WaitGroup 相当于信号量,程序结束时阻塞检测线程完成;
4: for, if 后 不直接带小括号;
5:大括号第一个必须跟在函数或上一句后面;
6:自定义多个 golang文件组织时:
6.1: package packageTest,的 packageTest 必须与所在文件夹同名
6.2:如果文件中的函数需要外部调用,函数首字母必须大写
6.3:外部调用,import 相关package, 调用函数, 包名.函数名(函数首字母大写)
7: len 函数可以获取数组元素个数, 也可以获取 字符串 的长度;
对于切片,函数len返回切片的长度,函数cap 返回切片的容量;
8: 切片,就是动态数组,一般数组长度确定后,不可改变,如果想要改变需要创建新的大小数组,然后复制数据到新的数组; 其实切片底层就是这么实现的;
如果切片的底层数组没有足够的可用容量,append 函数会创建一个新的底层数组,将被引用的现有的值复制到新数组里,再追加新的值;
8.1: 切片一般可以通过 make 声明;
8.2: 切片也可以像数组一样声明,但是 中括号【】中,不要指定长度;
声明数组和声明切片的不同
// 创建有3 个元素的整型数组
array := [3]int{10, 20, 30}
// 创建长度和容量都是3 的整型切片
slice := []int{10, 20, 30}
// 创建nil 整型切片
var slice []int
注意:数组和切片作为函数参数:
go语言里,数组,是保护内存数据的,所以作为函数参数一般传递数组指针;
切片,与切片关联的数据包含在底层数组里,不属于切片本身,所以将切片
复制到任意函数的时候,对底层数组大小都不会有影响。复制时只会复制切片本身,不会涉及底
层数组
8.3: 可以通过一个已存在的长的 slice ,在创建一个小于集合的slice;
对底层数组容量是k 的切片slice[i:j]来说
长度: j - i
容量: k - i
简单来说,第一个指向原slice索引,第二个减去第一个是长度;原slice长度,减去第一个,是容量;
注意:需要说明的是:新的slice 仅仅相当于一份原slice的子集指针索引,真正的数据内存公用同一份;
9: 映射,就是 map, 键值 - 数据