go的基本知识

本文记录了在使用go语言当中遇到的基本知识点,对于最简单的初级语法再也不罗列c++

  1. 驼峰命名法首字母大小写对应不一样访问权限:golang使用驼峰命名法,这个是基础知识。但须要注意的是golang中根据首字母的大小写来肯定能够访问的权限。不管是方法名、常量、变量名仍是结构体的名称,若是首字母大写,则能够被其余的包访问;若是首字母小写,则只能在本包中使用。这一点是我一开始没有注意到的。
  2. unsafe.Pointer & uintptr: golang里面 unsafe.Pointer()有些相似于void*,能够被转换成其余类型的指针且持有指针所指向的对象;uintptr是内置类型,本质上是一种整形,能够用来存储指针,可是它并不持有指针所指,也就是说其指向物会被GC.
  3. new&make, new只负责分配内存,并将内存初始化为0;make经常使用于 slice,map,channel的初始化。

    a. new返回的是一个指针,而make返回的是一个已经初始化过的对象的引用;golang

  4. 结合new&make讲一下slice:数据结构

    实际上golang是有array和slice两种数据结构的,并且array是slice的基础。其结构以下:app

    

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

  当使用相似于:var slice = new([10]int) 的时候,咱们实际上声明了一个array,它的类型是[10]int,这个10是类型的一部分。因此它是没办法append的,也就是它的长度是固定的。而对于开发人员来讲,确定但愿有一个可扩展的array供咱们使用,这就产生了所谓的slice。若是了解c++的vector,确定以为二者在思路上是差很少的,都是预先申请较多的空间并在适当的时候进行扩展。只不过这里的slice使用append函数进行了显式的管理。因此slice其实是有两个属性的,length,capacity, 使用 make([]int,10,100) 来进行初始化。函数

相关文章
相关标签/搜索