Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jschoedt/go-structmapper
Go library for 2-way mapping of structs to maps and maps to structs
https://github.com/jschoedt/go-structmapper
go go-module golang mapper mapping
Last synced: about 2 months ago
JSON representation
Go library for 2-way mapping of structs to maps and maps to structs
- Host: GitHub
- URL: https://github.com/jschoedt/go-structmapper
- Owner: jschoedt
- License: mit
- Created: 2020-07-15T13:18:39.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-12-14T21:40:36.000Z (about 3 years ago)
- Last Synced: 2024-09-15T06:24:25.157Z (3 months ago)
- Topics: go, go-module, golang, mapper, mapping
- Language: Go
- Homepage:
- Size: 20.5 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Go](https://github.com/jschoedt/go-structmapper/actions/workflows/github-ci.yaml/badge.svg)](https://github.com/jschoedt/go-structmapper/actions/workflows/github-ci.yaml)
[![Coverage Status](https://coveralls.io/repos/github/jschoedt/go-structmapper/badge.svg)](https://coveralls.io/github/jschoedt/go-structmapper)
[![Go Report Card](https://goreportcard.com/badge/github.com/jschoedt/go-structmapper)](https://goreportcard.com/report/github.com/jschoedt/go-structmapper)
[![GoDoc](https://godoc.org/github.com/jschoedt/go-structmapper?status.svg)](https://godoc.org/github.com/jschoedt/go-structmapper)
[![GitHub](https://img.shields.io/github/license/jschoedt/go-structmapper)](https://github.com/jschoedt/go-structmapper/blob/master/LICENSE)# go-structmapper
Convert any struct into a map and vice versa.
# Description
This library can recursively convert a struct to a map of type ```map[string]interface{}``` where the keys are the struct field names and the values are the field values.
Similarly, the library can set the fields of a struct using a map.A mapping function can be used to convert keys or values before they are set.
#### Features
- Handles composed structs
- Handles nested structs
- Handles reference cycles
- Supports unexported fields
- Supports field mapping or conversion#### Prerequisites
Not all types are tested or supported yet eg. interface, function, channel```
go get -u github.com/jschoedt/go-structmapper
```#### Default usage
```go
// convert struct to map
s := &SomeStruct{Name: "John"}
mapper := mapper.New()
m, err := mapper.StructToMap(s) // m["Name"] == "John"// convert map to struct
s = &SomeStruct{}
err := mapper.MapToStruct(m, s) // s.Name == "John"
```#### Using a conversion mapping
A MapFunc can be used to map a key or value to some other key or value. Returning the MappingType mapper.Ignore will ignore that field. The MapFunc will be called on every field
that is encountered in the struct```go
s := &SomeStruct{Name: "John"}
mapper := mapper.New()
mapper.MapFunc = func(inKey string, inVal interface{}) (mt MappingType, outKey string, outVal interface{}) {
return mapper.Default, strings.ToLower(inKey), "Deere"
}
m, err := mapper.StructToMap(s) // m["name"] == "Deere"// convert map to struct
s = &SomeStruct{}
mapper.CaseSensitive = false // now 'name' will match 'Name'
err := mapper.MapToStruct(m, s) // s.Name == "Deere"
```[More examples](https://github.com/jschoedt/go-structmapper/blob/master/mappers_test.go)