Gorm: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ{} ์ฟผ๋ฆฌ ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์— ๋งŒ๋“  2016๋…„ 02์›” 19์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: go-gorm/gorm

๊ตฌ์กฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” interface{} ๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? x2์˜ ์˜ˆ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ x1์˜ ์˜ˆ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ธ๊ฐ€์š” ๋ฒ„๊ทธ์ธ๊ฐ€์š”? ์–ด๋–ป๊ฒŒ ๋“  ์ด๊ฒƒ์„ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

package extensions

type Foo struct {
    Name string
}

func list() {
    var x1 interface{} = []Foo{}
    x2 := []Foo{}

    gormDB.Find(&x1) //unsupported destination, should be slice or struct
    gormDB.Find(&x2)
}

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

package main

import (
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type Foo struct {
    gorm.Model
    Name string
}

var db *gorm.DB

func find(v interface{}) {
    db.Debug().Find(v)
}

func main() {
    var err error
    db, err = gorm.Open("mysql", "gorm:gorm@/gorm?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }

    db.AutoMigrate(&Foo{})

    var x1 = []Foo{}
    find(&x1)
}

๋ชจ๋“  3 ๋Œ“๊ธ€

package main

import (
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type Foo struct {
    gorm.Model
    Name string
}

var db *gorm.DB

func find(v interface{}) {
    db.Debug().Find(v)
}

func main() {
    var err error
    db, err = gorm.Open("mysql", "gorm:gorm@/gorm?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }

    db.AutoMigrate(&Foo{})

    var x1 = []Foo{}
    find(&x1)
}

@jinzhu ์•ˆ๋…•ํ•˜์„ธ์š”, x1 ๋ฅผ ๋ฐ์ดํ„ฐ ์œ ํ˜• interface{} ๋กœ ํ• ๋‹นํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ์ฟผ๋ฆฌ์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

func main() {
    var err error
    db, err = gorm.Open("mysql", "gorm:gorm@/gorm?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }

    db.AutoMigrate(&Foo{})

    var x1 interface{} = []Foo{}
    find(&x1)  // ERROR: unsupported destination, should be slice or struct 
}

@SherL0cked
find(reflect.ValueOf(x1).Interface()) ์‹œ๋„

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰