回答編集履歴
3
いちおう書こうと思っていた回答を追記しておきます
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
スライスは元々参照タイプなので通常の関数引数にスライスを渡して値を変更した時、渡し元にも反映されます。
|
4
4
|
ただし、可変長引数でも双方スライスとして渡す場合には参照渡しのような結果になります。
|
5
|
-
https://play.golang.org/p/xpf1muwMat-
|
5
|
+
[https://play.golang.org/p/xpf1muwMat-](https://play.golang.org/p/xpf1muwMat-)
|
6
6
|
```go
|
7
7
|
package main
|
8
8
|
|
@@ -24,6 +24,18 @@
|
|
24
24
|
### rows.Scanの使い方
|
25
25
|
|
26
26
|
rows.Scanの各引数が参照型である必要がありますが、
|
27
|
-
interface型の参照型という概念はGoにはありません。
|
27
|
+
「interface型の参照型」という概念はGoにはありません。
|
28
|
+
interface{}型には「任意型の値の参照」を格納することができます。
|
28
29
|
|
30
|
+
```go
|
31
|
+
rows, _ = db.Query("クエリ")
|
32
|
+
for rows.Next() {
|
33
|
+
numFields := 10 //実際には構造体のフィールド数を取得します(10は例です)
|
29
|
-
|
34
|
+
datas := []interface{}{}
|
35
|
+
for i:=0; i<numFields; i++ {
|
36
|
+
n := "" //任意の型を初期化
|
37
|
+
datas = append(datas, &n) //任意の型の参照をスライスに追加
|
38
|
+
}
|
39
|
+
rows.Scan(datas...) // 参照渡しな値のスライスを渡す
|
40
|
+
}
|
41
|
+
```
|
2
Scanの使い方(書きかけ)
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
### タイトルとGoの仕様としての回答
|
2
|
+
|
1
3
|
スライスは元々参照タイプなので通常の関数引数にスライスを渡して値を変更した時、渡し元にも反映されます。
|
2
4
|
ただし、可変長引数でも双方スライスとして渡す場合には参照渡しのような結果になります。
|
3
5
|
https://play.golang.org/p/xpf1muwMat-
|
@@ -17,4 +19,11 @@
|
|
17
19
|
f(s...)
|
18
20
|
fmt.Println(s)
|
19
21
|
}
|
20
|
-
```
|
22
|
+
```
|
23
|
+
|
24
|
+
### rows.Scanの使い方
|
25
|
+
|
26
|
+
rows.Scanの各引数が参照型である必要がありますが、
|
27
|
+
interface型の参照型という概念はGoにはありません。
|
28
|
+
|
29
|
+
ちょっと出先なので書きかけです。あとで追記します。
|
1
投稿ミス修正
answer
CHANGED
@@ -1,1 +1,20 @@
|
|
1
|
-
スライスは元々参照タイプなのでスライスを渡して値を変更した時、渡し元にも反映されます。
|
1
|
+
スライスは元々参照タイプなので通常の関数引数にスライスを渡して値を変更した時、渡し元にも反映されます。
|
2
|
+
ただし、可変長引数でも双方スライスとして渡す場合には参照渡しのような結果になります。
|
3
|
+
https://play.golang.org/p/xpf1muwMat-
|
4
|
+
```go
|
5
|
+
package main
|
6
|
+
|
7
|
+
import (
|
8
|
+
"fmt"
|
9
|
+
)
|
10
|
+
|
11
|
+
func f(s ...string) {
|
12
|
+
s[1] = ""
|
13
|
+
}
|
14
|
+
|
15
|
+
func main() {
|
16
|
+
s := []string{"a", "b", "c"}
|
17
|
+
f(s...)
|
18
|
+
fmt.Println(s)
|
19
|
+
}
|
20
|
+
```
|