上次用 Nodejs 连接的 mssql ,这里再用 Go 实现一下。使用 Gin 框架 + gorm 来实现,其中 gorm 仅使用了原生 sql 查询功能,模型绑定功能见其官方文档。

前情回顾见如下文章:

这里直接上 golang 的代码,以供参考:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/jinzhu/gorm"

	// _ "github.com/jinzhu/gorm/dialects/mysql"
	_ "github.com/jinzhu/gorm/dialects/mssql"
)

func main() {
	r := gin.Default()

	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	r.GET("/get_something", func(c *gin.Context) {
		inParams := c.Query("params")

		sql := ""
		sql = "SELECT name FROM SomeTable WHERE SomeField = " + inParams
		if sql == "" {
			return
		}
		fmt.Println(sql)
                // 连接数据库
		db, err := gorm.Open("mssql", "server=localhost;user id=sa;password=your_password;port=1433;database=YOUR_DBNAME")
		if err != nil {
			fmt.Println(err)
			return
		}

                // 定义结构体
		type Result struct {
			Name string
		}

		var result Result
		rows, err := db.Raw(sql).Rows() // (*sql.Rows, error)
		if err != nil {
			fmt.Println(err)
			return
		}
		defer rows.Close()

		for rows.Next() {
			if err := rows.Scan(&result.Name); err != nil {
				fmt.Println("Scan.Error:")
				fmt.Println(err.Error())
				return
			}
			fmt.Println("result:")
			fmt.Println(result)
		}

		c.JSON(200, gin.H{
			"message": result.Name,
		})
	})

	// http.ListenAndServe(":2000", r)

	r.Run() // listen and serve on 0.0.0.0:8080
}

交叉编译,见下文: