Skip to content

Eratta_1e_rev2

Akihiro Takizawa edited this page Jan 20, 2023 · 9 revisions

第2刷の正誤表

初版第2刷の正誤表です。第3刷で修正の予定です。

p7 1.2.4 20行目

実行時にifを使って簡単にエラーの種別を
実行時にifを使って簡単にエラーの種別を

p13 1.4.3 の本文1行目末尾より

多値を返すことできます。
多値を返すことできます。

p36 2.1.1

以下のような型名と同名の変数を使うコードが書けてしまいます。型を変数に渡したり、関数に渡すことができません。型と変数で別々に名前空間が存在するため、型と変数は出会うことはなく、すれ違い続けます。同じ関数スコープの中でも変数とは名前が衝突しません。
なお、型が定義されているのと別の名前空間(関数)内であれば、型名と同じ変数名も定義できます。他の言語では型は大文字スタート、変数は小文字スタートというルールが多く、同名を使うことは少ないのですが、「1.1.1 変数やパッケージ、メソッドなどに名前を付けるには」で触れたように、Goでは命名規則の都合で同名のものを使う機会がたまにあります。

p40 2.2.2 下から14行目のコードブロック

vs := url.Values{}
vs.Add("key1", "value1")
vs.Add("key2", "value2")
for k, v := range vs {
    fmt.Printf("%s: %v\n", k, v)
}

vs.Add("key1", "value1")
vs.Add("key1", "value2")                 // 同じキー
fmt.Printf("key1: %v\n", vs.Get("key1")) // Getメソッドだと最初の要素のみ
for i, v := range vs["key1"] {           // インデックスアクセスすると全値取得可能
    fmt.Printf("key1[%d]: %v\n", i, v)
}

p43 2.3.1 コード例

※ このコード例中、4つの type 宣言はすべて同様に func の誤りです

p45 2.3.3 Price関数の形

p80 3.9.1の末尾

テーブルベーステストのテスト項目を
テーブル駆動テストのテスト項目を

p87 表4-1 io.Writerの「目的」

ファイルやネットワークからへの書き込み
ファイルやネットワークへの書き込み

p89 4-1 12行目

Normalize(r, w)
Normalize(w, r)

p94 4.3.3 本文2行目

違う同じメソッド群を持つ別の型
同じメソッド群を持つ別の型

p115 6.1 下から2行目

また、これまでGoの歴史の中では比較的変動が大きかった要素だったこともから
また、これまでGoの歴史の中では比較的変動が大きかった要素だったことも

p.116 6.1.2 冒頭

AモジュールがBモジュールをインポートしながら、BモジュールもAモジュールをインポートして
AパッケージがBパッケージをインポートしながら、BパッケージもAパッケージをインポートして

p122 6.3 ページ末尾のコマンド

$ git push origin main --tag
$ git push origin main --tags

p171 8.1.1 脚注5

内部的な処理ではreflrectパッケージを用いていており
内部的な処理ではreflectパッケージを用いており

p190 8.3.2 HeaderColumn()関数

``return []interface{}{"国名", "ISOコード", "人工"}
``return []interface{}{"国名", "ISOコード", "人口"}

p193 8.3.4 ページ下部のコード例中 Contry構造体

Pupulation int 'csv:"人工"'
Pupulation int 'csv:"人口"'

p196 8.4.3 構造体のタグ

``ISBN string fixed:"1,18" ``
``ISBN string fixed:"1,17" ``

p199 9章 本文2行目

AWS DynamoDB
Amazon DynamoDB

※p217 下から9行目も同様

p207-208 9.2.3 トランザクションラッパーでトランザクション制御を実装と分離する方法のサンプルコード

※ 紙面に掲載しているコードにトランザクションの問題があることが分かりました。下記のコードをアップデートしていますので、ご査収ください

https://github.com/oreilly-japan/practical-go-programming/blob/master/ch09/transaction/wrapper/main.go

p232 10.2.1 11行目

マルチプレクサHTTPサーバーとして起動させるには
マルチプレクサHTTPサーバーとして起動させるには

p235 コード例下から11行目より

::
case "Message": out = append(out, fmt.Sprintf("Messageは1 ~ 140文字です")) case "UserName": out = append(out, fmt.Sprintf("Messageは1 ~ 15文字です"))
::
case "Message": out = append(out, "Messageは1 ~ 140文字です") case "UserName": out = append(out, "UserNameは1 ~ 15文字です")

p245 10.5.2 ページ最後のレスポンスボディを出力するコード例

:: func (lrw *loggingResponseWriter) Write(b []byte) (int, error) {

if statusCode >= 400 {
log.Printf("Response Body: %s", b)

} return lrw.ResponseWriter.Write(b)

}

:: func (lrw *loggingResponseWriter) Write(b []byte) (int, error) {

if lrw.statusCode >= 400 {
log.Printf("Response Body: %s", b)

} return lrw.ResponseWriter.Write(b)

}

p250 10.6.1 本文下から2行目

以下のコマンドでで自動生成のプロジェクトページが実行されます。
以下のコマンドで自動生成のプロジェクトページが実行されます。

p269 12.1 1行目

ログはサービスを運用する上では須といえますが
ログはサービスを運用する上では須といえますが

p277 12.4.1 表12-1 2行目の「概要」

致命的なエラー。プログラムの以上終了をともなう
致命的なエラー。プログラムの異常終了をともなう

p296 13.2.3の本文1行目と4行目

T.Run()
t.Run()

※2か所あります

p333 表14-2デプロイ用イメージ

golang:1.x-slim-bullseye
debian:slim-bullseye

p365 16.1.2の3行目

言語のコアに組み込まれおり
言語のコアに組み込まれおり

p388 16.7 下から6行目

FakeFuturePromise()を呼ぶと
MakeFuturePromise()を呼ぶと

p391 下から15行目コード例の1行目

.. code:

type contextKey struct{}
var tokenContextKey contextKey = struct{}{}

p399 A.1 下から7行目

実行ファイルでもライブラリでもまずは次のコマンドをたいて
実行ファイルでもライブラリでもまずは次のコマンドをたいて

p408 リストA-5

// 存在しない要素にアクセスするとゼロ値 fmt.Println(hs[0]) // panic
// 存在しない要素にアクセスするとゼロ値 fmt.Println(hs[0]) // 空文字列

p409 リストA-9コメント

//1変数だけ書けばインデックス飲みを受け取れる
//1変数だけ書けばインデックスのみを受け取れる