mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:33:04 +08:00
Merge branch 'master' of https://github.com/dake/the-way-to-go_ZH_CN
This commit is contained in:
@@ -57,11 +57,11 @@ func NewMatrix(params) *matrix {
|
|||||||
在其他包里使用工厂方法:
|
在其他包里使用工厂方法:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
import "matrix"
|
import "matrix"
|
||||||
...
|
...
|
||||||
wrong := new(matrix.matrix) // 编译失败(matrix 是私有的)
|
wrong := new(matrix.matrix) // 编译失败(matrix 是私有的)
|
||||||
right := matrix.NewMatrix(...) // 实例化 matrix 的唯一方式
|
right := matrix.NewMatrix(...) // 实例化 matrix 的唯一方式
|
||||||
```
|
```
|
||||||
|
|
||||||
## 10.2.2 map 和 struct vs new() 和 make()
|
## 10.2.2 map 和 struct vs new() 和 make()
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 10.5.1 定义
|
## 10.5.1 定义
|
||||||
|
|
||||||
结构体可以包含一个或多个 **匿名(或内嵌)字段**,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即 **结构体可以包含内嵌结构体**。
|
结构体可以包含一个或多个 **匿名(或内嵌)字段**,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型就是字段的名字。匿名字段本身可以是一个结构体类型,即 **结构体可以包含内嵌结构体**。
|
||||||
|
|
||||||
可以粗略地将这个和面向对象语言中的继承概念相比较,随后将会看到它被用来模拟类似继承的行为。Go 语言中的继承是通过内嵌或组合来实现的,所以可以说,在 Go 语言中,相比较于继承,组合更受青睐。
|
可以粗略地将这个和面向对象语言中的继承概念相比较,随后将会看到它被用来模拟类似继承的行为。Go 语言中的继承是通过内嵌或组合来实现的,所以可以说,在 Go 语言中,相比较于继承,组合更受青睐。
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ func main() {
|
|||||||
|
|
||||||
当两个字段拥有相同的名字(可能是继承来的名字)时该怎么办呢?
|
当两个字段拥有相同的名字(可能是继承来的名字)时该怎么办呢?
|
||||||
|
|
||||||
1. 外层名字会覆盖内层名字,这提供了一种重载字段或方法的方式
|
1. 外层名字会覆盖内层名字(但是两者的内存空间都保留),这提供了一种重载字段或方法的方式
|
||||||
2. 如果相同的名字在同一级别出现了两次,如果这个名字被程序使用了,将会引发一个错误(不使用没关系)。没有办法来解决这种问题引起的二义性,必须由程序员自己修正。
|
2. 如果相同的名字在同一级别出现了两次,如果这个名字被程序使用了,将会引发一个错误(不使用没关系)。没有办法来解决这种问题引起的二义性,必须由程序员自己修正。
|
||||||
|
|
||||||
例子:
|
例子:
|
||||||
|
Reference in New Issue
Block a user