2017-07-08 17 views
0

を通じて構造体タグの「宛先名がありません」私はこのようなモデルがあります:私はこのようなクエリでグループのためsqlx.SelectをしようとするときSQLXポインタ

type Course struct { 
    Name string `db:"course_name"` 
} 

type Group struct { 
    Course *Course 
} 
type Groups []Group 

をそして:

SELECT c.name as course_name FROM courses as c; 

私は* main.Groups

0123内の宛先名COURSE_NAMEを逃す

を取得します

エラーです。

このコードの問題点は何ですか?

答えて

0

複数の行を選択していて、クエリの場合と同様に結果をスライスにスキャンする場合は、sqlx.Getを1行に使用する必要があります。sqlx.Selectを使用する必要があります。また

そのフィールドのいずれも(Course構造体とは違って)タグ付けされていない、とCourseフィールドが埋め込まれていないため、あなたはGroup構造体に直接スキャンすることはできません。

試してみてください。

course := Course{} 
courses := []Course{} 

db.Get(&course, "SELECT name AS course_name FROM courses LIMIT 1") 
db.Select(&courses, "SELECT name AS course_name FROM courses") 
+0

もちろん、私はSqlx.Selectをやっています - それはタイプミスです – evocatus

+0

コースとコースであなたのコードが動作します。 – evocatus

+0

あいまいさがなければ、すべてのフィールドにsqlxを使用するためにタグを付ける必要はありません。私はまだ私のコード(問題の)がうまくいかない理由を理解していません。 Sqlxはポインタを介してstructタグを読み取ることができません。 Sqlxはポインターを介して構造体に値をスキャンできません。 – evocatus

0

私はCourse CourseCourse *Courseを変更しない - 何の効果も。 私はこのように埋め込まれた:

type Group struct { 
    Course 
} 

それは働いた。

これも有効です。SQLXが埋め込まれたフィールド以外のものを理解していないよう

type Group struct { 
    *Course 
} 

が見えます。

関連する問題