不允许使用嵌套函数

时间:2014-07-10 07:59:43

标签: html go render

我想获取我的数据库的一个表的值并在html中解析它们。这是我曾经尝试过的代码,但是我收到了一个名为nested func not allowed的错误。

我开始创建一个结构:

type App struct{
    Title string
    Author string
    Description string
}

我创建了一个渲染模板的函数:

func render(w http.ResponseWriter, tmpl string){
    tmpl = fmt.Sprintf("templates/%s", tmpl)
    t, err := template.ParseFiles(tmpl)
    if err != nil{
        log.Print("template parsing error: ", err)
    }
    err = t.Execute(w, "")
    if err != nil{
        log.Print("template executing error: ", err)
    }
}

然后,在这里我从数据库中获取了应用程序并尝试将它们呈现给html。

func myApps(w http.ResponseWriter, r *http.Request){
    db, err := sql.Open("postgres"," user=postgres dbname=test host=localhost password=1234 sslmode=disable")
    if err != nil{
        log.Fatal(err)
    }
        rows, err := db.Query(`SELECT title, author, description FROM apps
                                 WHERE title ILIKE $1
                                 OR author ILIKE $1
                                 OR description ILIKE $1`)
            defer rows.Close()

            apps := []App{}
            for rows.Next(){
                b := App{}
                err := rows.Scan(&b.Title, &b.Author, &b.Description)
                apps = append(apps, b)

    render(w, "myapps.html", apps)
}

提前谢谢你!

1 个答案:

答案 0 :(得分:1)

该行可能包含for statement

for rows.Next(){

我没有看到在其他任何地方打开“{”。

(或者它已关闭,但func myApps未关闭)

也许应该是:

        for rows.Next() {
            b := App{}
            err := rows.Scan(&b.Title, &b.Author, &b.Description)
            apps = append(apps, b)
        }
        render(w, "myapps.html", apps)
}

无论如何,运行go fmt总是一个好主意。