DB接続してSELECTした結果を表示するAPI

package main

import (
    "database/sql"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "github.com/labstack/echo"
)

type User struct {
    Name string
    Id   string
}

func main() {
    db, err := sql.Open("mysql",
        "nobu2:1234@tcp(127.0.0.1:3306)/ordering")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close() // 関数がリターンする直前に呼び出される

    rows, err := db.Query("SELECT * FROM test1") //
    if err != nil {
        panic(err.Error())
    }

    columns, err := rows.Columns() // カラム名を取得
    if err != nil {
        panic(err.Error())
    }

    values := make([]sql.RawBytes, len(columns))

    //  rows.Scan は引数に `[]interface{}`が必要.
    scanArgs := make([]interface{}, len(values))
    for i := range values {
        scanArgs[i] = &values[i]
    }
    u := User{}
    ulist := []User{}

    val := ""
    for rows.Next() {
        err = rows.Scan(scanArgs...)
        if err != nil {
            panic(err.Error())
        }

        for i, col := range values {
            // Here we can check if the value is nil (NULL value)
            if col == nil {
                val = "NULL"
            } else {
                val = string(col)
            }
            if columns[i] == "id" {
                u.Id = val
            } else if columns[i] == "name" {
                u.Name = val
            }
        }
        ulist = append(ulist, u)
    }

    result := ""

    for i, p := range ulist {

        result = result + string(i) + p.Id + ":" + p.Name
    }

    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, result)
    })

    e.GET("/api", func(c echo.Context) error {
        return c.String(http.StatusOK, "hello world")
    })

    e.Logger.Fatal(e.Start(":1323"))
}