@@ -157,4 +157,59 @@ func StructDeepEqual() error {
157157 output .Stdoutl ("[deepequal(st1,st2)]" , reflect .DeepEqual (st1 , st2 ))
158158
159159 return nil
160+
161+ /*
162+ $ task
163+ task: [build] go build .
164+ task: [run] ./try-golang -onetime
165+
166+ ENTER EXAMPLE NAME: struct_deep_equal
167+
168+ [Name] "struct_deep_equal"
169+ ===> 等値かどうかのチェック
170+ [&st1] 0xc000024d60
171+ [&st2] 0xc000024d80
172+ [&st1 == &st2] false
173+ ===> 等価かどうかのチェック (1)
174+ ===> 全てのフィールドの値が同じ
175+ [st1] {{1 1} 1 0xc000014958}
176+ [st2] {{1 1} 1 0xc000014960}
177+ [st1 == st2] false
178+ [deepequal(st1,st2)] true
179+ ===> 等価かどうかのチェック (2)
180+ ===> 片方の構造体のデータを変化させる (自身のフィールドのみを変化)
181+ [st1] {{1 1} 1 0xc000014958}
182+ [st2] {{1 1} 2 0xc000014960}
183+ [st1 == st2] false
184+ [deepequal(st1,st2)] false
185+ ===> 等価かどうかのチェック (3)
186+ ===> 片方の構造体のデータを変化させる (組み込み構造体側の公開フィールド値を変化)
187+ [st1] {{1 1} 1 0xc000014958}
188+ [st2] {{2 1} 1 0xc000014960}
189+ [st1 == st2] false
190+ [deepequal(st1,st2)] false
191+ ===> 等価かどうかのチェック (4)
192+ ===> 片方の構造体のデータを変化させる (組み込み構造体側の非公開フィールド値を変化)
193+ [st1] {{1 1} 1 0xc000014958}
194+ [st2] {{1 2} 1 0xc000014960}
195+ [st1 == st2] false
196+ [deepequal(st1,st2)] false
197+ ===> 等価かどうかのチェック (5)
198+ ===> 片方の構造体がポインタで保持している先のデータのフィールドを変化させる
199+ [st1] {{1 1} 1 0xc000014958}
200+ [st2] {{1 1} 1 0xc000014960}
201+ [st1 == st2] false
202+ [deepequal(st1,st2)] false
203+ ===> 等価かどうかのチェック (6)
204+ ===> 片方の構造体がポインタで保持しているデータ自体を変更
205+ ===> しかし、データのフィールド値は同じ
206+ [st1] {{1 1} 1 0xc000014958}
207+ [st2] {{1 1} 1 0xc0000149e0}
208+ [st1 == st2] false
209+ [deepequal(st1,st2)] true
210+
211+
212+ [Elapsed] 170.21µs
213+ */
214+
160215}
0 commit comments