jiusanzhou
5/17/2018 - 5:27 AM

Golang Tips

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