参考资料
[1] Go语言中查问SqlServer数据库
[2] gorm连贯到数据库

1. gorm的形式

package daoimport (    "fmt"    "gorm.io/driver/sqlserver"    "gorm.io/gorm"    "testing")type User struct {    Userid int64  `gorm:"column:userid"`    Name   string `gorm:"column:name"`    Age    int64  `gorm:"column:age"`}func TestGorm(t *testing.T) {    dsn := "sqlserver://sa:123456@DESKTOP-HMTA87I:1433?database=wzz"    db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})    if err != nil {        panic(err)    }    var users []User    db.Table("dbo.users").Limit(10).Order("userid asc").Find(&users)    for _, u := range users {        fmt.Println(u)    }}

2.sql形式

文件dao/connect_test.go内容:

package daoimport (    "database/sql"    "fmt"    _ "github.com/denisenkom/go-mssqldb"    "testing"    "time")func TestConnect(t *testing.T) {    var isdebug = true    var server = "DESKTOP-HMTA87I"    var port = 1433    var user = "sa"    var password = "123456"    var database = "wzz"    //连贯字符串    connString := fmt.Sprintf("server=%s;port%d;database=%s;user id=%s;password=%s", server, port, database, user, password)    if isdebug {        fmt.Println(connString)    }    //建设连贯    conn, err := sql.Open("mssql", connString)    if err != nil {        t.Fatal("Open Connection failed:", err.Error())    }    defer conn.Close()    t.Log("连贯胜利!")    //产生查问语句的Statement    stmt, err := conn.Prepare(`select * from dbo.users`)    if err != nil {        t.Fatal("Prepare failed:", err.Error())    }    rows, err := stmt.Query()    if err != nil {        t.Fatal("Query failed:", err.Error())    }    defer stmt.Close()    //建设一个列数组    cols, err := rows.Columns()    var colsdata = make([]interface{}, len(cols))    for i := 0; i < len(cols); i++ {        colsdata[i] = new(interface{})        fmt.Print(cols[i])        fmt.Print("\t")    }    fmt.Println()    //遍历每一行    for rows.Next() {        rows.Scan(colsdata...) //将查到的数据写入到这行中        PrintRow(colsdata)     //打印此行    }    defer rows.Close()}//打印一行记录,传入一个行的所有列信息func PrintRow(colsdata []interface{}) {    for _, val := range colsdata {        switch v := (*(val.(*interface{}))).(type) {        case nil:            fmt.Print("NULL")        case bool:            if v {                fmt.Print("True")            } else {                fmt.Print("False")            }        case []byte:            fmt.Print(string(v))        case time.Time:            fmt.Print(v.Format("2016-01-02 15:05:05.999"))        default:            fmt.Print(v)        }        fmt.Print("\t")    }    fmt.Println()}

3.应用实体实现的办法

type AccessRegion struct {    userid int64    name   string    age    int64}func TestAccess(t *testing.T) {    var server = "DESKTOP-HMTA87I"    var port = 1433    var user = "sa"    var password = "123456"    var database = "wzz"    //连贯字符串    connString := fmt.Sprintf("server=%s;port%d;database=%s;user id=%s;password=%s", server, port, database, user, password)    //建设连贯    db, err := sql.Open("mssql", connString)    if err != nil {        t.Fatal("Open Connection failed:", err.Error())    }    defer db.Close()    //通过连贯对象执行查问    rows, err := db.Query(`select * from dbo.users`)    if err != nil {        t.Fatal("Query failed:", err.Error())    }    defer rows.Close()    var rowsData []*AccessRegion    //遍历每一行    for rows.Next() {        var row = new(AccessRegion)        rows.Scan(&row.userid, &row.name, &row.age)        rowsData = append(rowsData, row)    }    //打印数组    for _, ar := range rowsData {        fmt.Print(ar.userid, "\t", ar.name, "\t", ar.age)        fmt.Println()    }}