回答編集履歴
2
訂正
test
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
特定の言語について学ぶのなら**その言語の仕様書**を読むのが一番いいのです。仕様書にはその言語のことが過不足なくすべて書いてあります。あと、仕様書を読めるようになると他の言語を勉強するのも簡単になります。仕様書を見比べればすでに学んだ言語と違う点がすぐわかりますから。
|
2
2
|
|
3
3
|
いきなり仕様書を読むのは大変そうだということなら、**その言語の作者が書いた本** を読むのが次善の方法です。Goなら『[プログラミング言語Go](https://www.maruzen-publishing.co.jp/item/?book_no=295039)』ですね。最初から全部を読む必要はないです。買って最初の数章を読んだら手元に置いておき、何か疑問が出てきたら目次を見て関係ありそうな箇所を読んでみましょう。
|
4
|
+
[訂正] 本の原作者のカーニハンはGoの作者ではないですね。でも作者たちと長年一緒に仕事しているので作者みたいなものです。
|
4
5
|
|
5
6
|
前置き終わり。
|
6
7
|
|
1
微加筆
test
CHANGED
@@ -55,7 +55,7 @@
|
|
55
55
|
fmt.Println(c)
|
56
56
|
}
|
57
57
|
```
|
58
|
-
`CountUp()`がポインタを引数に取るように変更しました。`c`へのポインタを値渡しするので、`c`そのものはコピーされません。`CountUp()`の内部からはポインタを通じてコピーではない`c`自身のフィールドを操作できます。結果は次のようになります。
|
58
|
+
`CountUp()`がポインタを引数に取るように変更しました。`c`へのポインタを値渡しするので、`c`そのものはコピーされません。`CountUp()`の内部からはポインタを通じてコピーではない`c`自身のフィールドを操作できます [2]。結果は次のようになります。
|
59
59
|
```
|
60
60
|
{1}
|
61
61
|
```
|
@@ -68,11 +68,13 @@
|
|
68
68
|
...
|
69
69
|
}
|
70
70
|
|
71
|
+
または
|
72
|
+
|
71
73
|
func (c *Container) CountUp() {
|
72
74
|
...
|
73
75
|
}
|
74
76
|
```
|
75
|
-
前者では`CountUp()`内部から`c`のフィールドを変更できません。後者では変更できます。ですから、オブジェクトの変更を許すのならポインタをレシーバにすべきですし、逆に変更されないことを保証するためにあえてポインタを使わないということも考えられます。
|
77
|
+
前者では`CountUp()`内部から`c`のフィールドを変更できません。後者では変更できます。ですから、**オブジェクトの変更を許すのならポインタをレシーバにすべき**ですし、逆に**変更されないことを保証するためにあえてポインタを使わない**ということも考えられます。
|
76
78
|
|
77
79
|
他にもポインタを使う・使わない場面というのはあると思いますが、ひとまず例を挙げました。
|
78
80
|
|