Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hello,arrays-and-slices,maps 中几处错漏修复 #59

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion zh-CN/arrays-and-slices.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ func TestSum(t *testing.T) {
}
```

质疑测试的价值是非常重要的。测试并不是越多越好,而是尽可能的使你的代码更加健壮。太多的测试会增加维护成本,因为 **维护每个测试都是需要成本的**。
首要的一件事是确保测试用例中的值的正确性。测试并不是越多越好,而是尽可能的使你的代码更加健壮。太多的测试会增加维护成本,因为 **维护每个测试都是需要成本的**。

在本例中,针对该函数写两个测试其实是多余的,因为切片尺寸并不影响函数的运行。

Expand Down
2 changes: 2 additions & 0 deletions zh-CN/hello-world.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ Go 的另一个高质量特征是文档。通过运行 `godoc -http :8000`,可

大多数标准库都有优秀的文档和示例。浏览 [http://localhost:8000/pkg/testing/](http://localhost:8000/pkg/testing/) 是非常值得的,去看一下有什么对你有价值的内容。

如果你的 `godoc` 命令不起作用,那么也许你使用的是 Go 的较新版本(1.14或更高),[其中不再包括 `godoc` 命令](https://golang.org/doc/go1.14#godoc)。 你可以运行 `go get golang.org/x/tools/cmd/godoc` 以手动安装。

### Hello, YOU

现在有了测试,就可以安全地迭代我们的软件了。
Expand Down
18 changes: 12 additions & 6 deletions zh-CN/maps.md
Original file line number Diff line number Diff line change
Expand Up @@ -292,11 +292,15 @@ var m map[string]string
相反,你可以像我们上面那样初始化空 map,或使用 `make` 关键字创建 map:

```go
dictionary = map[string]string{}
dictionary := map[string]string{}

// OR

dictionary = make(map[string]string)
dictionary := make(map[string]string)

// OR

var dictionary = make(map[string]string)
```

这两种方法都可以创建一个空的 `hash map` 并指向 `dictionary`。这确保永远不会获得 `nil 指针异常`。
Expand Down Expand Up @@ -437,6 +441,8 @@ func (e DictionaryErr) Error() string {

我们将错误声明为常量,这需要我们创建自己的 `DictionaryErr` 类型来实现 `error` 接口。你可以在 [Dave Cheney 的这篇优秀文章](https://dave.cheney.net/2016/04/07/constant-errors)中了解更多相关的细节。简而言之,它使错误更具可重用性和不可变性。

下一步,让我们创建一个 `update` 函数用来更新字典中已存在单词(键)的定义(值)。

## 首先编写测试

```go
Expand All @@ -452,7 +458,7 @@ func TestUpdate(t *testing.T) {
}
```

`Update` 与 `Create` 密切相关,这是下一个需要我们实现的方法。
`Update` 与 `Add` 密切相关,这是下一个需要我们实现的方法。

## 尝试运行测试

Expand All @@ -476,15 +482,15 @@ dictionary_test.go:55: got 'this is just a test' want 'new definition'

## 编写足够的代码使测试通过

当我们用 `Create` 解决问题时就明白了如何处理这个问题。所以让我们实现一个与 `Create` 非常相似的方法。
当我们用 `Add` 解决问题时就明白了如何处理这个问题。所以让我们实现一个与 `Add` 非常相似的方法。

```go
func (d Dictionary) Update(word, definition string) {
d[word] = definition
}
```

我们不需要对此进行重构,因为更改很简单。但是,我们现在遇到与 `Create` 相同的问题。如果我们传入一个新单词,`Update` 会将它添加到字典中。
我们不需要对此进行重构,因为更改很简单。但是,我们现在遇到与 `Add` 相同的问题。如果我们传入一个新单词,`Update` 会将它添加到字典中。

## 首先编写测试

Expand Down Expand Up @@ -626,7 +632,7 @@ func (d Dictionary) Delete(word string) {

Go 的 map 有一个内置函数 `delete`。它需要两个参数。第一个是这个 map,第二个是要删除的键。

`delete` 函数不返回任何内容,我们基于相同的概念构建 `Delete` 方法。由于删除一个不存在的值是没有影响的,与我们的 `Update` 和 `Create` 方法不同,我们不需要用错误复杂化 API。
`delete` 函数不返回任何内容,我们基于相同的概念构建 `Delete` 方法。由于删除一个不存在的值是没有影响的,与我们的 `Update` 和 `Add` 方法不同,我们不需要用错误复杂化 API。

## 总结

Expand Down