golang Golang实用程序将结构转换为具有小写键的映射。将struct映射到json很有用(大写名称总是让我眨眼)。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Golang实用程序将结构转换为具有小写键的映射。将struct映射到json很有用(大写名称总是让我眨眼)。相关的知识,希望对你有一定的参考价值。

// see https://play.golang.org/p/6YD4YdvGLr 
// for an example

import (
	"reflect"
	"unicode"
	"unicode/utf8"
)


func structToLowerFirstMap(in interface{}) map[string]interface{} {
	v := reflect.ValueOf(in)
	vType := v.Type()

	result := make(map[string]interface{}, v.NumField())

	for i := 0; i < v.NumField(); i++ {
		name := vType.Field(i).Name
		result[lowerFirst(name)] = v.Field(i).Interface()
	}
	
	return result;

}

func lowerFirst(s string) string {
	if s == "" {
		return ""
	}
	r, n := utf8.DecodeRuneInString(s)
	return string(unicode.ToLower(r)) + s[n:]
}

Golang中函数结构体,将函数转换为接口

函数结构体,将函数转换为接口

定义一个函数类型 F,并且实现接口 A 的方法,然后在这个方法中调用自己。这是 Go 语言中将其他函数转换为接口 A 的常用技巧(参数返回值定义与 F 一致)

实现一个动态生成的“回调函数”,比如缓存中,当key不存在,则需要从数据库或文件等远程数据源中取数据。所以回调函数不能写死。

采用用户自定义回调函数的方法,因此,在缓存的数据结构中,有一个成员方法变量为回调函数。

下面这段代码就是一个示例。

type Getter interface {
	Get(key string)([]byte,error)
}

type GetterFunc func(key string)([]byte,error)

//
func (f GetterFunc) Get(key string)([]byte,error){
	return f(key)
}
//test
func TestGetterFunc_Get(t *testing.T) {
	var f Getter  = GetterFunc(func(key string) ([]byte,error) {
		return []byte(key),nil
	})

	expect := []byte("key")
	if v,_ := f.Get("key");!reflect.DeepEqual(v,expect){
		t.Error("callback failed")
	}
}

以上是关于golang Golang实用程序将结构转换为具有小写键的映射。将struct映射到json很有用(大写名称总是让我眨眼)。的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组转换为 Golang 中的 syscall.InotifyEvent 结构

golang Marshal / Unmarshal将不同的JSON对象转换为Go结构

Golang中函数结构体,将函数转换为接口

golang超级mapper包 - coven

在Golang中将结构指针转换为接口指针

将 URL.Query(切片映射)转换为 struct golang