package main import ( "database/sql" "database/sql/driver" _ "github.com/lib/pq" "strings" ) func E(err error) { if err != nil { panic(err) } } type MyType string func (self MyType) Value() (v driver.Value, err error) { return strings.ToUpper(string(self)), nil } func main() { db, err := sql.Open("postgres", "dbname=test sslmode=disable") E(err) _, err = db.Exec("drop table if exists a") E(err) _, err = db.Exec("create table a(id bigserial primary key, t text)") q := "insert into a(t) values($1)" // Works with value s := "one" _, err = db.Exec(q, s) E(err) // Works with pointer var ps *string s = "two" ps = &s _, err = db.Exec(q, ps) E(err) // Works with nil pointer ps = nil _, err = db.Exec(q, ps) E(err) // Works with value v := MyType("four") _, err = db.Exec(q, v) E(err) // Works with pointer v = MyType("five") pv := &v _, err = db.Exec(q, pv) E(err) // Does NOT work with nil pointer pv = nil _, err = db.Exec(q, pv) E(err) }