https://github.com/lwch/kvconf
golang kv configure file
https://github.com/lwch/kvconf
Last synced: 2 months ago
JSON representation
golang kv configure file
- Host: GitHub
- URL: https://github.com/lwch/kvconf
- Owner: lwch
- License: mit
- Created: 2021-05-13T02:57:34.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-12-01T08:04:16.000Z (over 3 years ago)
- Last Synced: 2025-01-03T17:32:01.597Z (4 months ago)
- Language: Go
- Size: 26.4 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# kvconf
[](https://www.travis-ci.com/lwch/kvconf)
[](https://codecov.io/gh/lwch/kvconf)
[](https://pkg.go.dev/github.com/lwch/kvconf)
[](https://goreportcard.com/report/github.com/lwch/kvconf)golang simple kv configure file library
## install
go get github.com/lwch/kvconf
## example
package main
import (
"bytes"
"fmt"
"strconv"
"strings""github.com/lwch/kvconf"
)func assert(err error) {
if err != nil {
panic(err)
}
}type custom uint16
// UnmarshalKV custom unmarshaler interface
func (ct *custom) UnmarshalKV(v string) error {
n, err := strconv.ParseUint(v, 10, 16)
if err != nil {
return err
}
*ct = custom(n)
return nil
}// MarshalKV custom marshaler interface
func (ct custom) MarshalKV() (string, error) {
return fmt.Sprintf("%d", ct), nil
}var st struct {
Listen custom `kv:"listen"` // support custom marshaler and unmarshaler
LogDir string `kv:"log_dir"`
}var mp map[string]string
func decode() {
data := `
# trim the left space
listen = 8080
log_dir = /var/log/kvconf.log # trim this`fmt.Println("======= decode =======")
// decode to struct
assert(kvconf.NewDecoder(strings.NewReader(data)).Decode(&st))
fmt.Printf("struct: listen=%d, log_dir=%s\n", st.Listen, st.LogDir)// decode to map[string]string
assert(kvconf.NewDecoder(strings.NewReader(data)).Decode(&mp))
fmt.Printf("map[string]string: listen=%s, log_dir=%s\n", mp["listen"], mp["log_dir"])
}func encode() {
fmt.Println("======= encode =======")// encode from struct
var buf bytes.Buffer
assert(kvconf.NewEncoder(&buf).Encode(st))
fmt.Printf("struct:\n%s\n", buf.String())// encode from map[string]string
buf.Reset()
assert(kvconf.NewEncoder(&buf).Encode(mp))
fmt.Printf("map[string]string:\n%s\n", buf.String())
}func main() {
decode()
encode()
}