示例#1
0
文件: scan.go 项目: rjp/crud
func NewScan(to interface{}) (*Scan, error) {
	scan := &Scan{
		To:         to,
		ToPointers: meta.HasPointers(to),
		ToStructs:  meta.HasAnyStruct(to),
	}

	if scan.ToStructs {
		table, err := NewTable(to)
		if err != nil {
			return nil, err
		}

		scan.Table = table
		scan.SQLColumnDict = table.SQLColumnDict()
	}

	return scan, nil
}
示例#2
0
func TestHasAnyStruct(t *testing.T) {
	var u Foo
	var up Foo
	var sup []*Foo

	assert.True(t, meta.HasAnyStruct(Foo{}))
	assert.True(t, meta.HasAnyStruct(&Foo{}))
	assert.True(t, meta.HasAnyStruct([]Foo{}))
	assert.True(t, meta.HasAnyStruct([]*Foo{}))
	assert.True(t, meta.HasAnyStruct(&[]Foo{}))
	assert.True(t, meta.HasAnyStruct(&[]*Foo{}))
	assert.True(t, meta.HasAnyStruct(u))
	assert.True(t, meta.HasAnyStruct(&up))
	assert.True(t, meta.HasAnyStruct(sup))

	var a string
	var b int
	var c bool

	assert.False(t, meta.HasAnyStruct(123))
	assert.False(t, meta.HasAnyStruct(true))
	assert.False(t, meta.HasAnyStruct(""))
	assert.False(t, meta.HasAnyStruct(a))
	assert.False(t, meta.HasAnyStruct(b))
	assert.False(t, meta.HasAnyStruct(c))
}