{"id":18497442,"url":"https://github.com/jschoedt/go-structmapper","last_synced_at":"2025-07-12T03:40:55.742Z","repository":{"id":45638093,"uuid":"279873657","full_name":"jschoedt/go-structmapper","owner":"jschoedt","description":"Go library for 2-way mapping of structs to maps and maps to structs","archived":false,"fork":false,"pushed_at":"2021-12-14T21:40:36.000Z","size":21,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-17T00:20:40.723Z","etag":null,"topics":["go","go-module","golang","mapper","mapping"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jschoedt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-15T13:18:39.000Z","updated_at":"2024-12-06T20:00:50.000Z","dependencies_parsed_at":"2022-09-05T07:40:15.832Z","dependency_job_id":null,"html_url":"https://github.com/jschoedt/go-structmapper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jschoedt%2Fgo-structmapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jschoedt%2Fgo-structmapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jschoedt%2Fgo-structmapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jschoedt%2Fgo-structmapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jschoedt","download_url":"https://codeload.github.com/jschoedt/go-structmapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076851,"owners_count":22010611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","go-module","golang","mapper","mapping"],"created_at":"2024-11-06T13:34:34.020Z","updated_at":"2025-05-14T05:13:36.627Z","avatar_url":"https://github.com/jschoedt.png","language":"Go","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)\n[![Coverage Status](https://coveralls.io/repos/github/jschoedt/go-structmapper/badge.svg)](https://coveralls.io/github/jschoedt/go-structmapper)\n[![Go Report Card](https://goreportcard.com/badge/github.com/jschoedt/go-structmapper)](https://goreportcard.com/report/github.com/jschoedt/go-structmapper)\n[![GoDoc](https://godoc.org/github.com/jschoedt/go-structmapper?status.svg)](https://godoc.org/github.com/jschoedt/go-structmapper)\n[![GitHub](https://img.shields.io/github/license/jschoedt/go-structmapper)](https://github.com/jschoedt/go-structmapper/blob/master/LICENSE)\n\n# go-structmapper\n\nConvert any struct into a map and vice versa.\n\n# Description\n\nThis 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.\nSimilarly, the library can set the fields of a struct using a map.\n\nA mapping function can be used to convert keys or values before they are set.\n\n#### Features\n\n- Handles composed structs\n- Handles nested structs\n- Handles reference cycles\n- Supports unexported fields\n- Supports field mapping or conversion\n\n#### Prerequisites\nNot all types are tested or supported yet eg. interface, function, channel\n\n```\ngo get -u github.com/jschoedt/go-structmapper\n```\n\n#### Default usage\n\n```go\n// convert struct to map\ns := \u0026SomeStruct{Name: \"John\"}\nmapper := mapper.New()\nm, err := mapper.StructToMap(s) // m[\"Name\"] == \"John\"\n\n// convert map to struct\ns = \u0026SomeStruct{}\nerr := mapper.MapToStruct(m, s) // s.Name == \"John\"\n```\n\n#### Using a conversion mapping\n\nA 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\nthat is encountered in the struct\n\n```go\ns := \u0026SomeStruct{Name: \"John\"}\nmapper := mapper.New()\nmapper.MapFunc = func(inKey string, inVal interface{}) (mt MappingType, outKey string, outVal interface{}) {\n\treturn mapper.Default, strings.ToLower(inKey), \"Deere\"\n}\nm, err := mapper.StructToMap(s) // m[\"name\"] == \"Deere\"\n\n// convert map to struct\ns = \u0026SomeStruct{}\nmapper.CaseSensitive = false // now 'name' will match 'Name'\nerr := mapper.MapToStruct(m, s) // s.Name == \"Deere\"\n```\n\n[More examples](https://github.com/jschoedt/go-structmapper/blob/master/mappers_test.go)\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjschoedt%2Fgo-structmapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjschoedt%2Fgo-structmapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjschoedt%2Fgo-structmapper/lists"}