回答編集履歴

5

typo

2017/12/27 09:21

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -146,7 +146,7 @@
146
146
 
147
147
 
148
148
 
149
- cap を超えたタイミングで容量が収まらないので別のメモリを確保しています。これと同じ事が質問者さんのコードでもきます。ですので set 関数には obj のアドレスを渡し、set の中ではポインタのまま扱わなければならない事になります。
149
+ cap を超えたタイミングで容量が収まらないので別のメモリを確保しています。これと同じ事が質問者さんのコードでもきます。ですので set 関数には obj のアドレスを渡し、set の中ではポインタのまま扱わなければならない事になります。
150
150
 
151
151
 
152
152
 

4

fix

2017/12/27 09:21

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -92,6 +92,8 @@
92
92
 
93
93
  ```
94
94
 
95
+ [https://play.golang.org/p/EPZe8uMoEbQ](https://play.golang.org/p/EPZe8uMoEbQ)
96
+
95
97
 
96
98
 
97
99
  まず Go の slice は伸長し長さがcapを超えるとアドレスが変わります。どういう事かというとこれを実行して貰えると分かります。

3

fix

2017/12/27 09:06

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -148,7 +148,7 @@
148
148
 
149
149
 
150
150
 
151
- set の最初の ※1 では obj のアドレスを渡しています。※2 ではポインタをデリファレンスしています。v はデリファレンス結果であり、set の中での v は Set により呼び出し元の obj のアドレスを持っている事になります。次に reflect.Append は interface{} 型のまま呼び出せないので実体を参照する為にもう1回 Elem() を呼び出しています。※3 で reflect.Append の戻り値を使って v の値を更新しています。
151
+ set の最初の ※1 では obj のアドレスを渡しています。※2 ではポインタをデリファレンスしています。v はデリファレンス結果であり、set の中での v は呼び出し元の obj のアドレスを持っている事になります。次に reflect.Append は interface{} 型のまま呼び出せないので実体を参照する為にもう1回 Elem() を呼び出しています。※3 で reflect.Append の戻り値を使って v の値を更新しています。
152
152
 
153
153
 
154
154
 

2

fix

2017/12/27 09:04

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 質問者さんコードの間違いを正して正しく理解されたい様に見えましたので、代替案ではなく添削とさせて頂きます。
5
+ 質問者さんは、コードの間違いを正して正しく理解されたい様に見えましたので、代替案ではなく添削とさせて頂きます。
6
6
 
7
7
 
8
8
 

1

fix

2017/12/27 09:02

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -1,4 +1,4 @@
1
- >様々な形式を取りうるJSONなので、Interfaceの利用は不可避かと思いますが、正しく理解できていないようです。お手数ですが、対処法をご教示いただけないでしょうか。
1
+ > 様々な形式を取りうるJSONなので、Interfaceの利用は不可避かと思いますが、正しく理解できていないようです。お手数ですが、対処法をご教示いただけないでしょうか。
2
2
 
3
3
 
4
4