teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

実例追記

2020/01/21 00:49

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -1,3 +1,45 @@
1
1
  appendにはスライスへのポインタは渡せませんし、受け取れません。
2
- デリファレンスしす。デリファレンスしたところで受け取りましょう。
2
+ デリファレンスしたものをデリファレンスしたもので受け取りましょう。
3
- あとmutexの定義と利用がミスマッチなのは修正してください。
3
+ あとmutexの定義と利用がミスマッチなのは修正してください。
4
+
5
+ Goに慣れた人はたぶん以下のように書くかなぁ。
6
+ [https://play.golang.org/p/ZevaZGV8UZQ](https://play.golang.org/p/ZevaZGV8UZQ)
7
+ ```go
8
+ package main
9
+
10
+ import (
11
+ "fmt"
12
+ "sync"
13
+ )
14
+
15
+ type Results struct {
16
+ sync.Mutex
17
+ Numbers []int
18
+ }
19
+
20
+ func main() {
21
+ var results = &Results{}
22
+
23
+ var wg sync.WaitGroup
24
+ var numbers = [100]int{}
25
+
26
+ for i := range numbers {
27
+ wg.Add(1)
28
+ go func(i int) {
29
+ defer wg.Done()
30
+ pro(i, results)
31
+ }(i)
32
+ }
33
+ wg.Wait()
34
+ fmt.Println(len(results.Numbers))
35
+ fmt.Println(results.Numbers)
36
+ }
37
+
38
+ func pro(i int, results *Results) {
39
+ fmt.Println(i)
40
+ results.Lock()
41
+ defer results.Unlock()
42
+ //go funcの中でスライスに追加しmain関数でlenで呼びたいです
43
+ results.Numbers = append(results.Numbers, i)
44
+ }
45
+ ```