回答編集履歴

1

実例追記

2020/01/21 00:49

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -1,5 +1,89 @@
1
1
  appendにはスライスへのポインタは渡せませんし、受け取れません。
2
2
 
3
- デリファレンスしす。デリファレンスしたところで受け取りましょう。
3
+ デリファレンスしたものをデリファレンスしたもので受け取りましょう。
4
4
 
5
5
  あとmutexの定義と利用がミスマッチなのは修正してください。
6
+
7
+
8
+
9
+ Goに慣れた人はたぶん以下のように書くかなぁ。
10
+
11
+ [https://play.golang.org/p/ZevaZGV8UZQ](https://play.golang.org/p/ZevaZGV8UZQ)
12
+
13
+ ```go
14
+
15
+ package main
16
+
17
+
18
+
19
+ import (
20
+
21
+ "fmt"
22
+
23
+ "sync"
24
+
25
+ )
26
+
27
+
28
+
29
+ type Results struct {
30
+
31
+ sync.Mutex
32
+
33
+ Numbers []int
34
+
35
+ }
36
+
37
+
38
+
39
+ func main() {
40
+
41
+ var results = &Results{}
42
+
43
+
44
+
45
+ var wg sync.WaitGroup
46
+
47
+ var numbers = [100]int{}
48
+
49
+
50
+
51
+ for i := range numbers {
52
+
53
+ wg.Add(1)
54
+
55
+ go func(i int) {
56
+
57
+ defer wg.Done()
58
+
59
+ pro(i, results)
60
+
61
+ }(i)
62
+
63
+ }
64
+
65
+ wg.Wait()
66
+
67
+ fmt.Println(len(results.Numbers))
68
+
69
+ fmt.Println(results.Numbers)
70
+
71
+ }
72
+
73
+
74
+
75
+ func pro(i int, results *Results) {
76
+
77
+ fmt.Println(i)
78
+
79
+ results.Lock()
80
+
81
+ defer results.Unlock()
82
+
83
+ //go funcの中でスライスに追加しmain関数でlenで呼びたいです
84
+
85
+ results.Numbers = append(results.Numbers, i)
86
+
87
+ }
88
+
89
+ ```