Примерно как-то так:
const query = `
SELECT
A.class, A.fio, A.age, B.teacher_name
FROM
students A
LEFT JOIN teachers B ON A.class = B.class`
func scan(db *sql.DB) (*MyClass, error) {
rows, err := db.Query(query)
if err != nil {
return nil, err
}
class := MyClass{}
for rows.Next() {
var a, b, c, d string
if err := rows.Scan(&a, &b, &c, &d); err != nil {
return nil, err
}
class.Class = a
class.TeacherName = d
class.Students = append(class.Students, Student{Age: c, Fio: b})
}
return &class, nil
}
Возможно есть ошибки, код не проверял, накидал "на коленке", думаю смысл должен быть понятен