utility

module
v0.0.0-...-3e1e274 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2016 License: MIT

README

utility

Set of utilities

Convert

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())

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL