0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

golangでのfor文で失敗したこと

Last updated at Posted at 2019-04-21

golangで配列から必要な値を使おうと、forを回して値をポインタで取得したら失敗したので残しておきます。


var result1 *int64
var result2 *int64
check := []int64{1,2,3,4,5,6}

for _, v := range check {
    if v == 3 {
        result1 = &v
    }
    if v == 4 {
        result2 = &v
    }
}

fmt.Println(result1)
fmt.Println(result2)

6
6

デリファレンスでvのポインタを保持するようにしているため、結果として配列の最後の値になってしまいました。

for文のkeyとvalueは、それぞれループで同じポインタを利用しているみたいです。


var result1 *int64
var result2 *int64
check := []int64{1,2,3,4,5,6}

for k, v := range check {
    if v == 3 {
        result1 = &check[k]
    }
    if v == 4 {
        result2 = &check[k]
    }
}

fmt.Println(result1)
fmt.Println(result2)

3
4

期待した内容のプログラムも書いてみました。

大丈夫そうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?