2016-03-21 11 views
5

में शामिल हों मैं थोक सम्मिलित करने का प्रयास करता हूं। मैं GORM github.com/jinzhu/gormगोलांग सरणी इंटरफ़ेस

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 
} 

का उपयोग लेकिन मैं एक त्रुटि मिली:

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)) 

अगर मैं मैनुअल क्वेरी का उपयोग यह काम करता है:

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

यह उत्पन्न करेगा:

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

समस्या यह है कि सरणी कैसे बनाएं स्ट्रिंग उत्पन्न करने के लिए टेरेस "XX1", "Jakarta", ...

सहायता के लिए धन्यवाद।

+0

क्या आपका मतलब यह था कि आप एक प्रश्न का उपयोग करके दो डेटा डालना चाहते हैं? – Kasnady

+0

हाँ मैं एक बार में मेरा डेटा एक बार में एकाधिक डेटा डालना चाहता हूं http://stackoverflow.com/a/21112176/2486312 – user2486312

उत्तर

4

यदि आप विविधता पैरामीटर वाले फ़ंक्शन में स्लाइस के तत्वों को पास करना चाहते हैं, तो आपको संकलक को बताने के लिए ... का उपयोग करना होगा ताकि आप सभी तत्वों को अलग-अलग पास कर सकें और स्लाइस वैल्यू को एक ही तर्क के रूप में पास न करें, तो बस करें :

tx.Exec(sqlStr, vals...) 

यह स्पेक में विस्तृत है: Passing arguments to ... parameters

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

तो तुम vals... पारित करने के लिए है:

Tx.Exec() के हस्ताक्षर हैं। इसके अलावा लौटाई गई त्रुटि की जांच भी न भूलें, उदाहरण:

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

धन्यवाद यह काम मेरी गलती है मुझे लगता है ... केवल नमूना: | – user2486312