Golang Masker is a simple utility of creating a mask for sensitive information.
$ go get -u github.com/ggwhite/go-masker
There are two ways to get a masker instance:
package main
import (
masker "github.com/ggwhite/go-masker"
)
func main() {
masker.Name("ggwhite")
masker.ID("A123456789")
masker.Mobile("0978978978")
}
package main
import (
masker "github.com/ggwhite/go-masker"
)
func main() {
m := masker.New()
m.Name("ggwhite")
m.ID("A123456789")
m.Mobile("0978978978")
}
Type | Const | Tag | Description |
---|---|---|---|
Name | MName | name | mask the second letter and the third letter |
Password | MPassword | password | always return ************ |
Address | MAddress | addr | keep first 6 letters, mask the rest |
MEmail | keep domain and the first 3 letters | ||
Mobile | MMobile | mobile | mask 3 digits from the 4'th digit |
Telephone | MTelephone | tel | remove ( , ) , , - chart, and mask last 4 digits of telephone number, format to (??)????-???? |
ID | MID | id | mask last 4 digits of ID number |
CreditCard | MCreditCard | credit | mask 6 digits from the 7'th digit |
Struct | MStruct | struct | mask the struct |
String
methomd requires two parameters, a mask type CONST and a string:
package main
import (
masker "github.com/ggwhite/go-masker"
)
func main() {
masker.String(masker.MName, "ggwhite")
masker.String(masker.MID, "A123456789")
masker.String(masker.MMobile, "0987987987")
}
Result:
g**hite
A12345****
0987***987
package main
import (
masker "github.com/ggwhite/go-masker"
)
func main() {
masker.String(masker.MName, "ggwhite")
masker.String(masker.MID, "A123456789")
masker.SetMask("-")
masker.String(masker.MMobile, "0987987987")
}
Result:
g**hite
A12345****
0987---987
You can define your struct and add tag mask
to let masker know what kind of the format to mask.
Field must be public in the struct.
package main
import (
"log"
masker "github.com/ggwhite/go-masker"
)
type Foo struct {
Name string `mask:"name"`
Mobile string `mask:"mobile"`
}
func main() {
foo := &Foo{
Name: "ggwhite",
Mobile: "0987987987",
}
t, err := masker.Struct(foo)
log.Println(t)
log.Println(t.(*Foo))
log.Println(err)
}
Result:
t = &{g**hite 0987***987}
err = <nil>
package main
import (
masker "github.com/ggwhite/go-masker"
)
type Foo struct {
Name string `mask:"name"`
Mobile string `mask:"mobile"`
Qoo *Qoo `mask:"struct"`
}
type Qoo struct {
Name string `mask:"name"`
Telephone string `mask:"tel"`
}
func main() {
foo := &Foo{
Name: "ggwhite",
Mobile: "0987987987",
Qoo: &Qoo{
Name: "gino",
Telephone: "0287658765",
},
}
t, err := masker.Struct(foo)
log.Println(t)
log.Println(t.(*Foo).Qoo)
log.Println(err)
}
Result:
t = &{g**hite 0987***987 0xc00000a080}
t.Qoo = &{g**o (02)8765-****}
err = <nil>
package main
import (
masker "github.com/ggwhite/go-masker"
)
type Foo struct {
Name string `mask:"name"`
Mobile string `mask:"mobile"`
IDs []string `mask:"id"`
}
func main() {
foo := &Foo{
Name: "ggwhite",
Mobile: "0987987987",
IDs: []string{
"A123456789",
"A987654321",
},
}
t, err := masker.Struct(foo)
log.Println(t)
log.Println(err)
}
Result:
t = &{g**hite 0987***987 [A12345**** A98765****]}
err = <nil>