2016-03-21 14 views
5

Ich versuche, Massen einfügen zu erstellen. Ich benutze gorm github.com/jinzhu/gormGolang Join Array-Schnittstelle

import (
    "fmt" 
    dB "github.com/edwinlab/api/repositories" 
) 

func Update() error { 
    tx := dB.GetWriteDB().Begin() 
    sqlStr := "INSERT INTO city(code, name) VALUES (?, ?),(?, ?)" 
    vals := []interface{}{} 

    vals = append(vals, "XX1", "Jakarta") 
    vals = append(vals, "XX2", "Bandung") 

    tx.Exec(sqlStr, vals) 

    tx.Commit() 

    return nil 
} 

Aber ich habe einen Fehler:

Error 1136: Column count doesn't match value count at row 1 becuse i return wrong query

INSERT INTO city(code, name) VALUES ('XX1','Jakarta','XX2','Bandung', %!v(MISSING)),(%!v(MISSING), %!v(MISSING)) 

Wenn ich manuelle Abfrage verwenden, funktioniert es:

tx.Exec(sqlStr, "XX1", "Jakarta", "XX2", "Bandung") 

Es wird erzeugen:

INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung') 

Das Problem besteht darin, wie man ein Array einrichtet Oberfläche, um Zeichenfolge wie "XX1", "Jakarta", ...

zu generieren Danke für Hilfe.

+0

meinst du das .. willst du zwei Daten mit einer Abfrage einfügen? – Kasnady

+0

ja ich möchte mehrere Daten auf einmal einfügen meine Referenz ist http://StackOverflow.com/a/21112176/2486312 – user2486312

Antwort

4

Wenn Sie Elemente eines Slices an eine Funktion mit variadic -Parameter übergeben möchten, müssen Sie ... verwenden, um dem Compiler mitzuteilen, dass Sie alle Elemente einzeln übergeben und den Slice-Wert nicht als einzelnes Argument übergeben möchten :

tx.Exec(sqlStr, vals...) 

Dies wird in der Spezifikation beschrieben: Passing arguments to ... parameters.

Tx.Exec() hat die Unterschrift:

func (tx *Tx) Exec(query string, args ...interface{}) (Result, error) 

Also muss man vals... passieren. Vergessen Sie auch nicht, den zurückgegebenen Fehler zu überprüfen, z. B .:

res, err := tx.Exec(sqlStr, vals...) 
if err != nil { 
    // handle error 
} 
+0

Danke es Arbeit ist meine Schuld, ich denke ... nur Probe: | – user2486312