Golang Gin 项目代码结构之共享 MySQL 数据库连接(二)

更新之后的目录结构

在这里插入图片描述

controllers/api/hello.go

package api
import (
	"github.com/gin-gonic/gin"
	"net/http"
	"main/models"
)
func HelloIndex(c *gin.Context) {
	models.GetValue("2")
	c.HTML(http.StatusOK, "api/hello.html", gin.H{})
}

manage/hello.go

package manage

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"main/models"
)

func HelloIndex(c *gin.Context) {
	models.GetValue("2")
	c.HTML(http.StatusOK, "manage/hello.html", gin.H{})
}

models/db.go


package models

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

var db *sql.DB

func InitDB(dataSourceName string) {
	var err error
	db, err = sql.Open("mysql", dataSourceName)

	if err != nil {
		log.Fatal("Error")
	}

	//defer db.Close()
}

models/kv.go


package models

type KV struct {
	Id         int
	Key        string
	Value      string
	Updated_at string
}

func GetValue(key string) (*KV, error) {
	var kv KV
	err := db.QueryRow("SELECT id, `key`, value, updated_at FROM kv where id = ?",
		key).Scan(&kv.Id, &kv.Key, &kv.Value, &kv.Updated_at)
	if err != nil {
		panic(err.Error()) // proper error handling instead of panic in your app
	}

	db.Exec(`update kv 
		set value = value + 1, updated_at = now() 
		where id = ?`, key)

	return &kv, err
}

views/api/hello.html


{{define "api/hello.html"}}

    <div>middle222</div>

{{end}}

views/manage/hello.html


{{define "api/hello.html"}}
    <div>middle222</div>
{{end}}

main.go


package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	// "github.com/joho/godotenv"
	// "log"
	// "os"
	"main/controllers/api"
	"main/controllers/manage"
	"main/models"
)

func main() {
	// err := godotenv.Load("../.env")
	// if err != nil {
	// 	log.Fatal("Error loading .env file")
	// }
	// db_database := os.Getenv("DB_DATABASE")
	// db_username := os.Getenv("DB_USERNAME")
	// db_password := os.Getenv("DB_PASSWORD")
	// db_host := os.Getenv("DB_HOST")
	// db_port := os.Getenv("DB_PORT")


	db_database := "test"
	db_username := "root"
	db_password := "root"
	db_host := "127.0.0.1"
	db_port := "3306"
	models.InitDB(fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&timeout=5000ms",
		db_username, db_password, db_host, db_port, db_database))

	router := gin.Default()
	router.LoadHTMLGlob("views/**/*")
	//router.LoadHTMLGlob("views/*.html")
	router.Static("/go/public", "./public")
	router.GET("/hello", api.HelloIndex)
	router.GET("/hello_manage", manage.HelloIndex)
	router.Run() //listen and serve on 0.0.0.0:8080
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值