Есть функция
import (
"api/kernel/httprouter"
"api/kernel/status"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"net/http"
)
func SelectMethods(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
rows, err := DB.Query("SELECT * FROM dev_method WHERE name=?", ps.ByName("methods"))
if err != nil {
status.Code503(w, r)
}
defer rows.Close()
bks := make([]*dev_method, 0)
for rows.Next() {
bk := new(dev_method)
err := rows.Scan(&bk.id, &bk.id_menu, &bk.name, &bk.description)
if err != nil {
status.Code503(w, r)
}
bks = append(bks, bk)
}
if err = rows.Err(); err != nil {
status.Code503(w, r)
}
i := 0
fmt.Fprintf(w, "{")
for _, bk := range bks {
i++
fmt.Fprintf(w, "'%s':['id_menu':'%s','name':'%s','description':'%s']", bk.id, bk.id_menu, bk.name, bk.description)
}
fmt.Fprintf(w, "}")
if i == 0 {
status.Code400(w, r)
}
}
status.go
pastebin.com/zMXdargE
router.go
pastebin.com/QzrvJMCw
Если ps.ByName("methods") нету в бд то в терминал пишет
2015/10/23 15:48:11 http: multiple response.WriteHeader calls
Я подозреваю что надо в конструкции
if err = rows.Err(); err != nil {
status.Code503(w, r)
}
как то остановить дальнейшее выполнение функции.
Возникает три вопроса.
1. Как исправить фун-цию?
2. Как остановить выполнение любой фун-ции в любом месте?
3. Как избавиться от конструкции
i := 0
fmt.Fprintf(w, "{")
for _, bk := range bks {
i++
fmt.Fprintf(w, "'%s':['id_menu':'%s','name':'%s','description':'%s']", bk.id, bk.id_menu, bk.name, bk.description)
}
fmt.Fprintf(w, "}")
if i == 0 {
status.Code400(w, r)
}
? зарание спасибо.