为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 GO (golang) 在 HTML 中嵌入 SQLX 结果

如何使用 GO (golang) 在 HTML 中嵌入 SQLX 结果

Go
沧海一幻觉 2021-09-13 16:37:31
我正在尝试使用 GO 作为后端将 Sql 查询的结果嵌入到 html 表中。为了在 Go 中迭代行结果,使用了 Rows.Next() 函数。这适用于打印到控制台窗口,但不适用于 html 表。这是我的 Go 代码:package main// Database connection Code for http://play.golang.org/p/njPBsg0JjDimport (    "net/http"    "html/template"    "fmt"    "github.com/LukeMauldin/lodbc"    "github.com/jmoiron/sqlx"    "database/sql")//declare database classvar db *sqlx.DBtype webdata struct {    Title string    Heading string    GridTitle string    ColumnHeading [9]string    RowData [9]string    NumOfRows *sql.Rows}//this is the function handler to handle '/mbconsole'func ConsoleHandler(w http.ResponseWriter, r *http.Request) {    //declare an instance of webdata    var wdata webdata    //connect to database    //Set ODBC driver level    lodbc.SetODBCVersion(lodbc.ODBCVersion_3)    var err error    //connect to a Microsoft SQL Server    db, err = sqlx.Open("lodbc", "[connectionstring]")    if err == nil {        fmt.Println("Connection successful")    }else{        fmt.Println("SQL Connection error", err)    }    // Execute the queries    rows, err := db.Query("[Select ...]")    if err != nil {        panic(err.Error())    }    // Get column names    columns, err := rows.Columns()    if err != nil {        panic(err.Error())    }    // Make a slice for the values    values := make([]interface{}, len(columns))    // rows.Scan wants '[]interface{}' as an argument, so we must copy the    // references into such a slice    // See http://code.google.com/p/go-wiki/wiki/InterfaceSlice for details    scanArgs := make([]interface{}, len(values))    for i := range values {        scanArgs[i] = &values[i]    }    //fill table headings, the table returns 9 columns so I just hard coded it    for i:=0;i<9;i++ {        wdata.ColumnHeading[i] = columns[i]    }我正确连接到数据库并使用“fmt”包我可以正确打印。但我不知道如何循环遍历 html 页面中返回的行数。有没有办法在 html 中将 sql.Rows 转换为正确的类型或循环设置整数次。附:我尝试在 html 中使用 {{ $index := 3}}...{end}} ,但这没有用任何投入将不胜感激
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我使用这个变体:



func MainPageHandler(w http.ResponseWriter, r *http.Request) { 

    type User struct {

        Name1  string

        Name2  string

    }


    rows, err := database.Query("select  .......;")

    if err != nil {

        log.Println(err)

    }

    defer rows.Close()

    user_current := []User{}

    for rows.Next() {

        p := User{}

        err := rows.Scan(&p.Name1, &p.Name2 )

        if err != nil {

            fmt.Println(err)

            continue

        }

        user_current = append(user_current, p)

    }

    tmpl, _ := template.ParseFiles("main_page.html")

    tmpl.Execute(w, user_current)

}

html


<table>

     <thead><th>name1/th><th>name2</th></thead>

            {{range . }}

            <tr>

                <td>{{.Name1}}</td>

                <td>{{.Name2}}</td>

            </tr>

            {{end}}

        </table>


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信