2022年10月

Go语言中make和new的区别

Go语言中,new和make都是用来内存(堆上)分配的原语(allocation primitives),但是:make只用于slice、map以及channel的初始化(非零值);new用于类型的内存分配,并且内存置为零。make返回的是引用类型本身;而new返回的是指向类型的指针。简单的说,new只分配内存,make用于slice,map,和channel的初始化。newfunc new(Type) *Type new(T) 函数是一个分配内存的内置函数,为每个类型分配一片内存,并初始化为零值且返回其内存地址。如果它还不是一个变量,不可以可以直接赋值:var v *int * ......
<阅读全文>

《Go语言圣经》学习笔记:结构体(struct)

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。下面两个语句声明了一个叫Employee的命名的结构体类型,并且声明了一个Employee类型的变量dilbert:type Employee struct { ID int Name string Address string DoB time.Time Position string Salary int ManagerID int } var dilbert Employee d ......
<阅读全文>

《Go语言圣经》学习笔记:map

1. map的概念了解Map之前,先了解下哈希表。哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是key和value之间可以是不同的数据类型。其中K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。2. 创 ......
<阅读全文>

《Go语言圣经》学习笔记:Slice

Slice(切片)代表变长的序列,序列中每个元素都有相同的类型,slice的语法和数组很像,只是没有固定长度而已。一个slice由三个部分构成:指针、长度和容量。指针 指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的第一个元素并不一定就是数组的第一个元素。长度 对应slice中元素的数目(长度不能超过容量)。容量 一般是从slice的开始位置到底层数据的结尾位置。1. 关于slice的长度和容量关于长度和容量的理解,可以参考下图:内置的len和cap函数分别返回slice的长度和容量。如果切片操作超出cap(s)的上限将导致一个panic异常,但是超出le ......
<阅读全文>