package clickhouse_api import ( "context" "fmt" "time" ) func SelectStruct() error { conn, err := GetNativeConnection(nil, nil, nil) if err != nil { return err } ctx := context.Background() if err := conn.Exec(ctx, `DROP TABLE IF EXISTS example`); err != nil { return err } err = conn.Exec(ctx, ` CREATE TABLE IF NOT EXISTS example ( Col1 UInt8, Col2 String, Col3 DateTime ) engine=Memory `) defer func() { conn.Exec(context.Background(), "DROP TABLE example") }() if err != nil { return err } batch, err := conn.PrepareBatch(ctx, "INSERT INTO example (Col1, Col2, Col3)") if err != nil { return err } for i := 0; i < 100; i++ { if err := batch.Append(uint8(i), fmt.Sprintf("value_%d", i), time.Now().Add(time.Duration(i)*time.Second)); err != nil { return err } } if err := batch.Send(); err != nil { return err } var result []struct { Col1 uint8 Col2 string ColumnWithName time.Time `ch:"Col3"` } if err = conn.Select(ctx, &result, "SELECT Col1, Col2, Col3 FROM example"); err != nil { return err } for _, v := range result { fmt.Printf("row: col1=%d, col2=%s, col3=%s\n", v.Col1, v.Col2, v.ColumnWithName) } return nil }