在声明一个新类型之后,声明一个该类型的方法之前需要先回答一个问题:这个类型的本质是什么。如果这个类型增加或者删除某个值,是要创建新值还是要更改当前的值?如果是要创建一个新值,该类型的方法就是使用值传递者。如果是修改当前的值就使用指针接受者这个答案会影响程序内部传递这个类型的值得方式:是按照值传递还是按照指针传递。保持传递的一致性很重要。这个背后的原则是,不要只关注某个地方是如何处理的这个值,而是要关注这个值得(本质是什么)?。
5.3.1内置类型
内置类型是由语言提供的一组类型。我们已经见过这些类型,分别是数值类型,字符串类型和布尔类型。这些类型本质上都是(原始的类型)?。因此党对这些值进行增加或者删除的时候,会创建一个新的值。基于这个结论把这些类型的值传递给方法或者函数时,应该传递一个(对应的值得副本)?。
5.3.2引用类型
go语言里的类型有一下几个:切片、映射、通道、接口和函数类型。当声明上述类型的变量的时候,创建的变量被称作(标头值)?。从技术细节上说(字符串也是一种引用类型)?。每个引用类型创建的标头值是一个包含指向底层数据结构的指针。每个引用类型还包括一组特殊的字段,(用于管理底层数据结构)?{管理方式}。因为标头值是为复制而设计的,所以永远不需要共享一个引用类型的值。标头值包含一个指针,因此通过复制来传递一个引用类型的值得副本,本质上就是在共享底层数据。
5.3.3
结构类型可以用来描述一组数据值,这组值的本质既可以是(原始的,也可以是非原始的)?。如果决定在某写东西需要删除或者添加某个接口类型的值时该结构的值不应该被改变,那么需要遵守之前提到的内置类型和引用类型的规范。