Set of utilities
convert value to target format simple & useful - convert.Int(v interface{}) int64 change v to int64 (return 0 when fail) - convert.IntWith(v interface{}, defatulValue int64) int64 change v to int64 (return defaultValue when fail) - convert.Float(v interface{}) float64 change v to float64 (return 0 when fail) - convert.FloatWith(v interface{}, defatulValue float64) float64 change v to float64 (return defaultValue when fail) - convert.String(v interface{}) string change v to string nil => "" time => "YYYY-MM-DD hh:mm:ss" else => fmt.Sprintf("%v") - convert.QueryString(val string) string replace ' in string to '' for SQL - convert.MD5(src string) string change src to MD5 hexa formatted string
# Database
Basic DB Wrapper with DBPool automatically reconnect when disconnected using driver mssql : "github.com/denisenkom/go-mssqldb" mysql : "github.com/go-sql-driver/mysql" mymysql : "github.com/ziutek/mymysql/godrv" odbc : "github.com/alexbrainman/odbc" postgres : "github.com/lib/pq" - Usage [renew] -- Call chain cfg := database.NewPool("postgres").Set("ip", "127.0.0.1").Set("db", "dbname").Set("user", "admin").Set("pw", "password").Set("ssl", "disable") dbPool := cfg.Open(10) //10 : poolsize-- Multiple attribute name support(ignore case) cm.AddKey(reflect.String, "Address", "Addr", "IP") cm.AddKey(reflect.Int, "Port") cm.AddKey(reflect.String, "Database", "db", "dbname") cm.AddKey(reflect.String, "Id", "UserId", "User") cm.AddKey(reflect.String, "Password", "pw", "passwd") cm.AddKey(reflect.Int, "Timeout") cm.AddKey(reflect.String, "SSL", "sslmode")
database.NewPool("postgres").Set("Address", "127.0.0.1") database.NewPool("postgres").Set("addr", "127.0.0.1") database.NewPool("postgres").Set("ip", "127.0.0.1")
-- Support JSON database.NewPool("postgres").Json(
{ "ip": "127.0.0.1", "db": "dbname", "user": "admin", "pw": "password", "ssl": "disable" }
)[legacy] database.CreateDBPool(DBTYPE, IP_ADDRESS, PORT, DBNAME, ID, PASSWORD, POOLSIZE)
(ex)
[renew] package main import ( "fmt" "utility/database" ) func main() { cfg := database.NewPool("postgres").Json(`{ "ip": "127.0.0.1", "db": "dbname", "user": "admin", "pw": "password", "ssl": "disable" }`) fmt.Println(cfg.ConnectionString()) dbPool := cfg.Open(10) db := dbPool.GetDB() defer dbPool.ReleaseDB(db) rows, err := db.Query(` /* CREATE TABLE s_user ( UID SERIAL primary key, userid varchar(4), userpw varchar(256) ) */ /* INSERT INTO s_user (userid, userpw) VALUES ('Test', 'abcd') */ SELECT * FROM s_user `) if err != nil { panic(err) } else { for rows.Next() { row := rows.FetchArray() fmt.Println(row) } } } [legacy] import ( "github.com/blackss2/utility/database" "fmt" ) var dbPool *database.DBPool //make db pool(recommend as global variable) func init() { //arg[0](string) : mssql, mysql, mymysql //arg[1](string) : ip or domain //arg[2](int) : port for database //arg[3](string) : database name //arg[4](string) : id //arg[5](string) : password //arg[6](int) : poolsize(size of concurrent query execution) dbPool = database.CreateDBPool("mssql", "127.0.0.1", 1433, "testdb", "testuser", "testpassword", 20) //18080 } func main() { db := dbPool.GetDB() defer dbPool.ReleaseDB(db) queryStr := `SELECT userid, userpw, usertype FROM t_user` rows, err := db.Query(queryStr) if err != nil { panic(err) } else { //rows.Cols : column name list for rows.Next() { // rows.FetchHash() will return hash(column_name, value) row := rows.FetchArray() // return current row as result([]interface{}) userid := row[0].(string) userpw := row[1].(string) usertype := row[2].(int64) fmt.Println(userid, userpw, usertype) } } }
# htmlwriter
Simple HTML Builder Escaping for attr, class, style is not implemented
-
htmlwriter.CreateHtmlNode(name string) *htmlwriter.HtmlNode create root node
-
(*htmlwriter.HtmlNode) Add(name string) *htmlwriter.HtmlNode add & return child node
-
(*htmlwriter.HtmlNode) InsertAfter(c *HtmlNode) *htmlwriter.HtmlNode insert node after target node
-
(*htmlwriter.HtmlNode) Eq(idx int) *htmlwriter.HtmlNode return child at index
-
(*htmlwriter.HtmlNode) Append(c *HtmlNode) *htmlwriter.HtmlNode append target node(c node is child node)
-
(*htmlwriter.HtmlNode) AppendTo(c *HtmlNode) *htmlwriter.HtmlNode append to target node(c node is parent node)
-
(*htmlwriter.HtmlNode) Detach() *htmlwriter.HtmlNode remove node from parent
-
(*htmlwriter.HtmlNode) Remove(c *HtmlNode) *htmlwriter.HtmlNode remove target node(c node is child node)
-
(*htmlwriter.HtmlNode) SetText(text string) *htmlwriter.HtmlNode set text(can be used with children)
-
(*htmlwriter.HtmlNode) Write(buffer *bytes.Buffer)
- should be changed to standard Write function write html to buffer
-
(*htmlwriter.HtmlNode) Class(name string) *htmlwriter.HtmlNode add class
-
(*htmlwriter.HtmlNode) RemoveClass(name string) *htmlwriter.HtmlNode remove class
-
(*htmlwriter.HtmlNode) Style(name string, value string) *htmlwriter.HtmlNode add style
-
(*htmlwriter.HtmlNode) RemoveStyle(name string) *htmlwriter.HtmlNode remove style
-
(*htmlwriter.HtmlNode) Attr(name string, value string) *htmlwriter.HtmlNode add attribute
-
(*htmlwriter.HtmlNode) RemoveAttr(name string) *htmlwriter.HtmlNode remove attribute
jDiv := htmlwriter.CreateHtmlNode("div") jTr := jDiv.Add("table").Class("table-bordered").Attr("id", "TABLEID") jTr.Add("td").SetText("Cell1").Add("td").SetText("Cell2").Attr("colspan", "2") jTr.Add("td").SetText("Cell1").Add("td").SetText("Cell2").Add("td").SetText("Cell3")var buffer bytes.Buffer jDiv.Write(&buffer)//not standard write function fmt.Println(buffer.String())