본문 바로가기

카테고리 없음

gin-gonic 라우터 for 문돌리기 전에 실패했는데 이번에 성공

일단 html을 바인딩하는데 반복적인 func 이 들어가서 이걸 해소 하려고 했다.
[이전코드]

package main

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/gofrs/uuid"
)

func get_index(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.
	c.HTML(http.StatusOK, "index.html", gin.H{})
}

func get_simple(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.
	c.HTML(http.StatusOK, "simple.html", gin.H{})
}

func get_chejan_balance(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "chejan_balance.html", gin.H{"uuid": uuid1})
}

func get_opt10085(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "opt10085.html", gin.H{"uuid": uuid1})
}

func get_chejan_order(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "chejan_order.html", gin.H{"uuid": uuid1})
}

func get_realtime_contract(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "realtime_contract.html", gin.H{"uuid": uuid1})
}

func get_send_order(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "send_order.html", gin.H{"uuid": uuid1})
}

func get_opt10001(c *gin.Context) {
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, "KIW_OPT10001(주식기본정보요청).html", gin.H{"uuid": uuid1})
}

 

반복이 많다. 이걸 map과 for문을 이용해서 줄였다.

var map_url map[string]string

func go_html(c *gin.Context) {
	c.Header("Content-Type", "text/html")

	fmt.Println(fmt.Sprintf("%v", c.Request.URL))
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.
	tmp := map_url[fmt.Sprintf("%v", c.Request.URL)]

	fmt.Println(tmp + ".html")
	c.Header("Content-Type", "text/html")
	//views폴더가 자동으로 지정되는 듯하다. view로 폴더이름 했을땐 에러났다.

	uuid1, err := uuid.NewV4()
	if err != nil {
		panic(err)
	}
	fmt.Println(uuid1)
	c.HTML(http.StatusOK, tmp+".html", gin.H{"uuid": uuid1})
}

func main() {

	map_url = make(map[string]string)
	map_url["/index"] = "index"
	map_url["/chejan_balance"] = "chejan_balance"
	map_url["/opt10085"] = "opt10085"
	map_url["/opt10001"] = "KIW_OPT10001(주식기본정보요청)"
	map_url["/chejan_order"] = "chejan_order"

	r := gin.Default()
	gin.ForceConsoleColor()
	//r.Static("/", "./views")
	r.Static("/src", "./views/src")

	r.HTMLRender = ginview.Default()
	r.GET("/ping2", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	/*html*/
	/*
		r.GET("/index", get_index)
		r.GET("/simple", get_simple)
		r.GET("/chejan_balance", get_chejan_balance)
		r.GET("/opt10085", get_opt10085)
		r.GET("/opt10001", get_opt10001)
		r.GET("/chejan_order", get_chejan_order)
		r.GET("/realtime_contract", get_realtime_contract)
		r.GET("/send_order", get_send_order)
		r.POST("/stock_detail", get_stock_detail)
		r.GET("/domain_mngr", get_domain_mngr)
		r.GET("/pgm_mngr", get_pgm_mngr)
		r.GET("/optkwfid", get_optkwfid)\
	*/

	for key, _ := range map_url {
		//fmt.Println(key, val)
		r.GET(key, go_html)
	}

 map에 데이터를 넣어넣고 
route를 for문을 돌려서 map에 있는걸로 넣어준다.
연결함수 go_html을 호출해주고 해당함수에서는 라우터 url을 기준으로 다시 map에서 값을 가져와 세팅해준다.

고고고!!