go的基本知识

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

  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返回的是一个已经初始化过的对象的引用;

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

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

    

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) 来进行初始化。

猜你喜欢

转载自www.cnblogs.com/souther-blog/p/10366800.html