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)
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测