Open liujiusheng opened 2 years ago
对比发现Echo框架比gin框架更易于使用,于是开始学习Echo框架。
奇怪的是所有GO的Web框架都说自己是最快最好的,让人完全摸不着头脑。
如果框架作为命令行使用就需要检查该框架调用exe文件是否方便,
如果要作为Web框架使用,那就要检验做数据库的增删改查是否方便。
连接PG数据库有pg和bun两个大的orm大框架,bun前身是go-pg框架,功能很丰富,但看了很久也没看明白怎么开始使用,最后只能放弃,选用了pg这个库。
使用数据库还需要引入go内置的包"database/sql"
通常连接数据库的操作放到代码的init函数内,初始化完成后赋值给一个全局变量,全局变量要是sql.DB类型的指针值。
slice切片和array的区别就是slice长度不定,array的长度在初始化时就定死了。
数据库查询出来的结果是一个数组,需要使用rows.Next()迭代取值。
结构体如果要通过encoding/json转换为json或xml的话需要标识每个字段的名称,否则转换出来会是空值:{{}{}}
echo框架内的context.JSON()函数中也使用到了encoding/json包的json.Marshal函数。
使用exec.Command()函数来包命令,命令的参数全部分切分成很多个参数传入本函数。
声明好后需要用command.Run()函数才会执行。
可以使用e.Static("/static", "static")来声明打包哪些静态资源,包括exe文件、html文件等。
如果想接收输出或错误信息需要提前声明command.Stdout = &bytes.Buffer{}和command.Stderr = &bytes.Buffer{}
package main import ( "net/http" // "os/exec" "fmt" // "bytes" // "encoding/json" "github.com/labstack/echo/v4" "database/sql" _ "github.com/lib/pq" // "github.com/uptrace/bun" // "github.com/uptrace/bun/dialect/pgdialect" // "github.com/uptrace/bun/driver/pgdriver" // "github.com/labstack/echo/v4/middleware" ) var dbcon *sql.DB type Users struct { Name string `json:"name" xml:"name"` Des string `json:"des" xml:"des"` } // 访问路径:http://localhost:1323/static/wasm_exec.html func init(){ db, err := sql.Open("postgres", "host=172.16.0.246 port=5433 user=postgres password=Dlyg@123 dbname=test sslmode=disable") dbcon = db if err!=nil{ fmt.Println(err) } } func main() { //首先生成cmd结构体,该结构体包含了很多信息,如执行命令的参数,命令的标准输入输出等 // command := exec.Command("F:\\3dtile-tool\\3dtile.exe", "-f", "shape","-i", "F:\\yuzhongqu.shp", "-o", "F:\\test-3dtile", "--height", "OBJECTID") // //给标准输入以及标准错误初始化一个buffer,每条命令的输出位置可能是不一样的, // //比如有的命令会将输出放到stdout,有的放到stderr // command.Stdout = &bytes.Buffer{} // command.Stderr = &bytes.Buffer{} //执行命令,直到命令结束 // err := command.Run() // if err != nil{ // //打印程序中的错误以及命令行标准错误中的输出 // fmt.Println(err) // fmt.Println(command.Stderr.(*bytes.Buffer).String()) // return // } // //打印命令行的标准输出 // fmt.Println(command.Stdout.(*bytes.Buffer).String()) e := echo.New() e.Static("/static", "static") e.GET("/", func(c echo.Context) error { rows, err := dbcon.Query("SELECT * FROM users") if err!=nil{ fmt.Println(err) } var userlist []Users for rows.Next() { var ( name string des string ) rows.Scan(&name,&des); var a Users a.Name = name; a.Des = des; fmt.Println(a) userlist = append(userlist, a) } fmt.Println(userlist) return c.JSON(http.StatusOK, userlist) }) e.Logger.Fatal(e.Start(":1323")) }
对比发现Echo框架比gin框架更易于使用,于是开始学习Echo框架。
奇怪的是所有GO的Web框架都说自己是最快最好的,让人完全摸不着头脑。
如果框架作为命令行使用就需要检查该框架调用exe文件是否方便,
如果要作为Web框架使用,那就要检验做数据库的增删改查是否方便。
Web框架
连接PG数据库有pg和bun两个大的orm大框架,bun前身是go-pg框架,功能很丰富,但看了很久也没看明白怎么开始使用,最后只能放弃,选用了pg这个库。
使用数据库还需要引入go内置的包"database/sql"
通常连接数据库的操作放到代码的init函数内,初始化完成后赋值给一个全局变量,全局变量要是sql.DB类型的指针值。
slice切片和array的区别就是slice长度不定,array的长度在初始化时就定死了。
数据库查询出来的结果是一个数组,需要使用rows.Next()迭代取值。
结构体如果要通过encoding/json转换为json或xml的话需要标识每个字段的名称,否则转换出来会是空值:{{}{}}
echo框架内的context.JSON()函数中也使用到了encoding/json包的json.Marshal函数。
CLI工具
使用exec.Command()函数来包命令,命令的参数全部分切分成很多个参数传入本函数。
声明好后需要用command.Run()函数才会执行。
可以使用e.Static("/static", "static")来声明打包哪些静态资源,包括exe文件、html文件等。
如果想接收输出或错误信息需要提前声明command.Stdout = &bytes.Buffer{}和command.Stderr = &bytes.Buffer{}
代码如下: