douyun1546 2016-07-18 15:59
浏览 40
已采纳

我在使用mysql作为数据库的Golang Web应用程序上需要帮助

I am new to Golang and had been following some tutorials and I want to put into practice what I have learned to create a website This is the main.go file

package main

import (
        "html/template"
        "net/http"
        "log"
        "database/sql"
        _"github.com/go-sql-driver/mysql"
)

//Fetch all templates
var templates, templatesErr = template.ParseGlob("templates/*")
 func main() {
  PORT  := ":9000"
  log.Println("Listening to port", PORT)
  http.HandleFunc("/", root)
  http.HandleFunc("/facilities", allFacilities)
  http.ListenAndServe(PORT, nil)

}
func root(w http.ResponseWriter, r *http.Request) {
    rootData := make(map[string]string)
    rootData["page_title"]  = "iSpace Open Data"
    rootData["body"]    = ""

    templates.ExecuteTemplate(w, "index.html", rootData)
}

 type facility struct{
   FacilityName string
   Type string
 }

func allFacilities(w http.ResponseWriter, r *http.Request){
  db, err := sql.Open("mysql", "root:08swanzy@tcp(127.0.0.1:3306)/iod")
  if err !=nil{
    log.Fatal(err)
  }
  defer db.Close()
  rows, err := db.Query("Select FacilityName, Type from health_facilities ")
  if err != nil {
      log.Fatal(err)
  }
  defer rows.Close()

  fac := facility{}
  facilities := []facility{}
  for rows.Next(){
    var FacilityName, Type string
    rows.Scan(&FacilityName, &Type)
    fac.FacilityName= FacilityName
    fac.Type= Type
    facilities = append(facilities, fac)
  }
  templates.ExecuteTemplate(w, "facilities.html", facilities)
}

This uses html files in templates folder for the view. But I keep on getting runtime error saying it has pointer dereference. I need help please.

  • 写回答

1条回答 默认 最新

  • duanben1324 2016-07-19 10:30
    关注

    Tried your code and got the same error. It happened on this line:

    templates.ExecuteTemplate(w, "index.html", rootData)
    

    The problem is that your templates are not loaded correctly. I moved template parsing to the main function and it works. Here the relevant code snippet:

    //Fetch all templates
    var (
        templates *template.Template
    )
    
    func main() {
        var err error
        templates, err = template.ParseGlob("templates/*")
        if err != nil {
            panic(err)
        }
    
        PORT := ":9000"
        log.Println("Listening to port", PORT)
        http.HandleFunc("/", root)
        http.HandleFunc("/facilities", allFacilities)
        http.ListenAndServe(PORT, nil)
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?