This commit is contained in:
ZengFei Zhang 2017-05-05 10:15:39 +08:00
parent dc92697fec
commit 6e80212a44
4 changed files with 6 additions and 6 deletions

View File

@ -73,7 +73,7 @@ fmt.Println(c == Celsius(f)) // "true"!
命名类型还可以为该类型的值定义新的行为。这些行为表示为一组关联到该类型的函数集合,我们称为类型的方法集。我们将在第六章中讨论方法的细节,这里只说些简单用法。
下面的声明语句Celsius类型的参数c出现在了函数名的前面表示声明的是Celsius类型的一个名叫String的方法该方法返回该类型对象c带着°C温度单位的字符串
下面的声明语句Celsius类型的参数c出现在了函数名的前面表示声明的是Celsius类型的一个名叫String的方法该方法返回该类型对象c带着°C温度单位的字符串
```Go
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }

View File

@ -1,6 +1,6 @@
### 2.6.1. 导入包
在Go语言程序中每个包都有一个全局唯一的导入路径。导入语句中类似"gopl.io/ch2/tempconv"的字符串对应包的导入路径。Go语言的规范并没有定义这些字符串的具体含义或包来自哪里它们是由构建工具来解释的。当使用Go语言自带的go工具箱时第十章一个导入路径代表一个目录中的一个或多个Go源文件。
在Go语言程序中每个包都有一个全局唯一的导入路径。导入语句中类似"gopl.io/ch2/tempconv"的字符串对应包的导入路径。Go语言的规范并没有定义这些字符串的具体含义或包来自哪里它们是由构建工具来解释的。当使用Go语言自带的go工具箱时第十章一个导入路径代表一个目录中的一个或多个Go源文件。
除了包的导入路径每个包还有一个包名包名一般是短小的名字并不要求包名是唯一的包名在包的声明处指定。按照惯例一个包的名字和包的导入路径的最后一个字段相同例如gopl.io/ch2/tempconv包的名字一般是tempconv。

View File

@ -14,7 +14,7 @@ Unicode字符rune类型是和int32等价的类型通常用于表示一个Unic
其中有符号整数采用2的补码形式表示也就是最高bit位用来表示符号位一个n-bit的有符号数的值域是从$-2^{n-1}$到$2^{n-1}-1$。无符号整数的所有bit位都用于表示非负数值域是0到$2^n-1$。例如int8类型整数的值域是从-128到127而uint8类型整数的值域是从0到255。
下面是Go语言中关于算术运算、逻辑运算和比较运算的二元运算符它们按照先级递减的顺序排列:
下面是Go语言中关于算术运算、逻辑运算和比较运算的二元运算符它们按照先级递减的顺序排列:
```
* / % << >> & &^
@ -30,7 +30,7 @@ Unicode字符rune类型是和int32等价的类型通常用于表示一个Unic
算术运算符`+`、`-`、`*`和`/`可以适用于整数、浮点数和复数,但是取模运算符%仅用于整数间的运算。对于不同编程语言,%取模运算的行为可能并不相同。在Go语言中%取模运算符的符号和被取模数的符号总是一致的,因此`-5%3`和`-5%-3`结果都是-2。除法运算符`/`的行为则依赖于操作数是否为全为整数,比如`5.0/4.0`的结果是1.25但是5/4的结果是1因为整数除法会向着0方向截断余数。
如果一个算术运算的结果不管是有符号或者是无符号的如果需要更多的bit位才能正确表示的话就说明计算结果是溢出了。超出的高位的bit位部分将被丢弃。如果原始的数值是有符号类型而且最左边的bit是1的话那么最终结果可能是负的例如int8的例子
一个算术运算的结果不管是有符号或者是无符号的如果需要更多的bit位才能正确表示的话就说明计算结果是溢出了。超出的高位的bit位部分将被丢弃。如果原始的数值是有符号类型而且最左边的bit是1的话那么最终结果可能是负的例如int8的例子
```Go
var u uint8 = 255
@ -114,7 +114,7 @@ for i := len(medals) - 1; i >= 0; i-- {
}
```
另一个选择对于上面的例子来说将是灾难性的。如果len函数返回一个无符号数那么i也将是无符号的uint类型然后条件`i >= 0`则永远为真。在三次迭代之后,也就是`i == 0`时i--语句将不会产生-1而是变成一个uint类型的最大值可能是$2^64-1$然后medals[i]表达式将发生运行时panic异常§5.9也就是试图访问一个slice范围以外的元素。
另一个选择对于上面的例子来说将是灾难性的。如果len函数返回一个无符号数那么i也将是无符号的uint类型然后条件`i >= 0`则永远为真。在三次迭代之后,也就是`i == 0`时i--语句将不会产生-1而是变成一个uint类型的最大值可能是$2^64-1$然后medals[i]表达式运行时将发生panic异常§5.9也就是试图访问一个slice范围以外的元素。
出于这个原因无符号数往往只有在位运算或其它特殊的运算场景才会使用就像bit集合、分析二进制文件格式或者是哈希和加密操作等。它们通常并不用于仅仅是表达非负数量的场合。

View File

@ -2,4 +2,4 @@
虽然从底层而言所有的数据都是由比特组成但计算机一般操作的是固定大小的数如整数、浮点数、比特数组、内存地址等。进一步将这些数组织在一起就可表达更多的对象例如数据包、像素点、诗歌甚至其他任何对象。Go语言提供了丰富的数据组织形式这依赖于Go语言内置的数据类型。这些内置的数据类型兼顾了硬件的特性和表达复杂数据结构的便捷性。
Go语言将数据类型分为四类基础类型、复合类型、引用类型和接口类型。本章介绍基础类型包括数字、字符串和布尔型。复合数据类型——数组§4.1和结构体§4.2——是通过组合简单类型来表达更加复杂的数据结构。引用类型包括指针§2.3.2、切片§4.2)字典§4.3、函数§5、通道§8虽然数据种类很多但它们都是对程序中一个变量或状态的间接引用。这意味着对任一引用类型数据的修改都会影响所有该引用的拷贝。我们将在第7章介绍接口类型。
Go语言将数据类型分为四类基础类型、复合类型、引用类型和接口类型。本章介绍基础类型包括数字、字符串和布尔型。复合数据类型——数组§4.1和结构体§4.2——是通过组合简单类型来表达更加复杂的数据结构。引用类型包括指针§2.3.2、切片§4.2)字典§4.3、函数§5、通道§8虽然数据种类很多但它们都是对程序中一个变量或状态的间接引用。这意味着对任一引用类型数据的修改都会影响所有该引用的拷贝。我们将在第7章介绍接口类型。