回答編集履歴
5
typo
test
CHANGED
@@ -146,7 +146,7 @@
|
|
146
146
|
|
147
147
|
|
148
148
|
|
149
|
-
cap を超えたタイミングで容量が収まらないので別のメモリを確保しています。これと同じ事が質問者さんのコードでも
|
149
|
+
cap を超えたタイミングで容量が収まらないので別のメモリを確保しています。これと同じ事が質問者さんのコードでも起きます。ですので set 関数には obj のアドレスを渡し、set の中ではポインタのまま扱わなければならない事になります。
|
150
150
|
|
151
151
|
|
152
152
|
|
4
fix
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
test
CHANGED
@@ -148,7 +148,7 @@
|
|
148
148
|
|
149
149
|
|
150
150
|
|
151
|
-
set の最初の ※1 では obj のアドレスを渡しています。※2 ではポインタをデリファレンスしています。v はデリファレンス結果であり、set の中での 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
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
質問者さんコードの間違いを正して正しく理解されたい様に見えましたので、代替案ではなく添削とさせて頂きます。
|
5
|
+
質問者さんは、コードの間違いを正して正しく理解されたい様に見えましたので、代替案ではなく添削とさせて頂きます。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
fix
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
>様々な形式を取りうるJSONなので、Interfaceの利用は不可避かと思いますが、正しく理解できていないようです。お手数ですが、対処法をご教示いただけないでしょうか。
|
1
|
+
> 様々な形式を取りうるJSONなので、Interfaceの利用は不可避かと思いますが、正しく理解できていないようです。お手数ですが、対処法をご教示いただけないでしょうか。
|
2
2
|
|
3
3
|
|
4
4
|
|