我在使用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.

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)

}