Golang tips all be here.
import (
"unsafe"
"reflect"
)
func bys2str(b []byte)string{
return *(*string)(unsafe.Pointer(&b))
}
func str2bys(s string)[]byte{
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
bh := reflect.SliceHeader{
Data: sh.Data,
Len: sh.Len,
Cap: sh.Len,
}
return *(*[]byte)(unsafe.Pointer(&bh))
}
// https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
// 函数式配置项,在Golang的开发过程中会神清气爽。
// 初次看到是在 `micro/go-micro` 的项目中
// 原始来源于 https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis 。
type Option func(*Options)
type Options struct {
Name string
}
func Name(n string) Option {
return func(o *Options) {
o.Name = n + ".setbyfunc"
}
}
func Start(opts ...Option) {
var opts = new(Options)
for _, o := range opts {
o(opts)
}
}