mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 19:41:43 +08:00
@@ -81,6 +81,14 @@ import ("fmt"; "os")
|
||||
|
||||
如果包名不是以 `.` 或 `/` 开头,如 `"fmt"` 或者 `"container/list"`,则 Go 会在全局文件进行查找;如果包名以 `./` 开头,则 Go 会在相对目录中查找;如果包名以 `/` 开头(在 Windows 下也可以这样使用),则会在系统的绝对路径中查找。
|
||||
|
||||
*译者注:以相对路径在GOPATH下导入包会产生报错信息*
|
||||
|
||||
*报错信息:local import "./XXX" in non-local package*
|
||||
|
||||
*引用:[Go programs cannot use relative import paths within a work space.](https://golang.org/cmd/go/#hdr-Relative_import_paths )*
|
||||
|
||||
*注解:在GOPATH外可以以相对路径的形式执行go build(go install 不可以)*
|
||||
|
||||
导入包即等同于包含了这个包的所有的代码对象。
|
||||
|
||||
除了符号 `_`,包中所有代码对象的标识符必须是唯一的,以避免名称冲突。但是相同的标识符可以在不同的包中使用,因为可以使用包名来区分它们。
|
||||
|
@@ -229,6 +229,14 @@ v := make([]int, 10, 50)
|
||||
**问题 7.3** 给定 `s := make([]byte, 5)`,len(s) 和 cap(s) 分别是多少?`s = s[2:4]`,len(s) 和 cap(s) 又分别是多少?
|
||||
**问题 7.4** 假设 `s1 := []byte{'p', 'o', 'e', 'm'}` 且 `s2 := s1[2:]`,s2 的值是多少?如果我们执行 `s2[1] = 't'`,s1 和 s2 现在的值又分别是多少?
|
||||
|
||||
*译者注:如何理解new、make、slice、map、channel的关系*
|
||||
|
||||
*1.slice、map以及channel都是golang内建的一种引用类型,三者在内存中存在多个组成部分,
|
||||
需要对内存组成部分初始化后才能使用,而make就是对三者进行初始化的一种操作方式*
|
||||
|
||||
*2. new 获取的是存储指定变量内存地址的一个变量,对于变量内部结构并不会执行响应的初始化操作,
|
||||
所以slice、map、channel需要make进行初始化并获取对应的内存地址,而非new简单的获取内存地址*
|
||||
|
||||
## 7.2.5 多维 切片
|
||||
|
||||
和数组一样,切片通常也是一维的,但是也可以由一维组合成高维。通过分片的分片(或者切片的数组),长度可以任意动态变化,所以 Go 语言的多维切片可以任意切分。而且,内层的切片必须单独分配(通过 make 函数)。
|
||||
|
@@ -33,6 +33,13 @@ func main() {
|
||||
fmt.Println(x) // 100000, ongeveer 1,5 s
|
||||
}
|
||||
```
|
||||
*译者注:原本认为leftmost的结果为1,认为只在最初做了一次赋值,实际结果为100000(无缓存信道具有同步阻塞的特性)*
|
||||
|
||||
*1.主线程的right <- 0,right不是最初循环的那个right,而是最终循环的right*
|
||||
|
||||
*2.for循环中最初的go f(left, right)因为没有发送者一直处于等待状态*
|
||||
|
||||
*3.当主线程的right <- 0执行时,类似于递归函数在最内层产生返回值一般*
|
||||
|
||||
## 链接
|
||||
|
||||
|
Reference in New Issue
Block a user