structs alternatives and similar packages
Based on the "Utilities" category.
Alternatively, view structs alternatives based on common mentions on social networks and blogs.
-
项目文档
基于vite+vue3+gin搭建的开发基础平台(已完成setup语法糖版本),集成jwt鉴权,权限管理,动态路由,显隐可控组件,分页封装,多点登录拦截,资源权限,上传下载,代码生成器,表单生成器等开发必备功能,五分钟一套CURD前后端代码。 -
excelize
Go language library for reading and writing Microsoft Excel™ (XLAM / XLSM / XLSX / XLTM / XLTX) spreadsheets -
godotenv
A Go port of Ruby's dotenv library (Loads environment variables from `.env`.) -
hystrix-go
Netflix's Hystrix latency and fault tolerance library, for Go -
goreporter
A Golang tool that does static analysis, unit testing, code review and generate code quality report. -
go-funk
A modern Go utility library which provides helpers (map, find, contains, filter, ...) -
gorequest
GoRequest -- Simplified HTTP client ( inspired by nodejs SuperAgent ) -
mc
MinIO Client is a replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage. -
gojson
Automatically generate Go (golang) struct definitions from example JSON -
Kopia
Cross-platform backup tool for Windows, macOS & Linux with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication. CLI and GUI included. -
spinner
Go (golang) package with 90 configurable terminal spinner/progress indicators. -
filetype
Fast, dependency-free Go package to infer binary file types based on the magic numbers header signature -
mole
CLI application to create ssh tunnels focused on resiliency and user experience. -
boilr
:zap: boilerplate template manager that generates files or directories from template repositories -
create-go-app
✨ Create a new production-ready project with backend, frontend and deploy automation by running one CLI command! -
beaver
💨 A real time messaging system to build a scalable in-app notifications, multiplayer games, chat apps in web and mobile apps. -
go-underscore
Helpfully Functional Go - A useful collection of Go utilities. Designed for programmer happiness. -
JobRunner
Framework for performing work asynchronously, outside of the request flow -
git-time-metric
Simple, seamless, lightweight time tracking for Git -
mimetype
A fast Golang library for media type and file extension detection, based on magic numbers
Less time debugging, more time building
Do you think we are missing an alternative of structs or a related project?
Popular Comparisons
README
Golang structs
Package structs implements simple functions to manipulate structs in Golang.
[
](github.com/PumpkinSeed/structs/LICENSE.md)
Get it
go get github.com/PumpkinSeed/structs
Contains
Contains reports whether value is within struct
package main
import "github.com/PumpkinSeed/structs"
type Tst struct {
TestString string
TestFloat32 float32
TestFloat64 float64
}
func main() {
tst := Tst{
TestString: "test",
TestFloat32: 13.444,
TestFloat64: 16.444,
}
result := structs.Contains(tst, float64(16.444)) // true
result = structs.Contains(tst, float32(13.444)) // true
}
Benchmark
BenchmarkContains-4 3000000 492 ns/op
Compare
Compare returns a boolean comparing two struct
package main
import "github.com/PumpkinSeed/structs"
type TstA struct {
TestInt int
TestInt8 int8
TestInt16 int16
}
type TstB struct {
TestInt int
TestInt8 int8
TestInt16 int16
}
func main() {
tstA := TstA{
TestInt: 12,
TestInt8: 42,
TestInt16: 55,
}
tstB := TstB{
TestInt: 12,
TestInt8: 42,
TestInt16: 55,
}
result := structs.Compare(testStructA, testStructB) // true
}
Benchmark
BenchmarkCompareEqual-4 5000000 379 ns/op
BenchmarkCompareNotEqual-4 5000000 372 ns/op
Index
Index returns the index of the first instance of the value in struct
package main
import "github.com/PumpkinSeed/structs"
type Tst struct {
TestInt int
TestInt8 int8
TestInt16 int16
TestInt32 int32
TestInt64 int64
TestString string
TestBool bool
TestFloat32 float32
TestFloat64 float64
}
func main() {
tst := Tst{
TestInt: 12,
TestInt8: 42,
TestInt16: 55,
TestInt32: 33,
TestInt64: 78,
TestString: "test",
TestBool: false,
TestFloat32: 13.444,
TestFloat64: 16.444,
}
result := structs.Index(testStruct, "test") // 5
}
Benchmark
BenchmarkIndex-4 5000000 242 ns/op
FieldNameByValue
FieldNameByValue returns the field's name of the first instance of the value in struct
package main
import "github.com/PumpkinSeed/structs"
type Tst struct {
TestInt int
TestInt8 int8
TestInt16 int16
TestInt32 int32
TestInt64 int64
TestString string
TestBool bool
TestFloat32 float32
TestFloat64 float64
}
func main() {
tst := Tst{
TestInt: 12,
TestInt8: 42,
TestInt16: 55,
TestInt32: 33,
TestInt64: 78,
TestString: "test",
TestBool: false,
TestFloat32: 13.444,
TestFloat64: 16.444,
}
result := structs.FieldNameByValue(testStruct, "test") // TestString
}
Benchmark
BenchmarkFieldNameByValue-4 5000000 293 ns/op
Map
The second parameter is a function, apply the function on each field on the struct, or on the condition determined in the third argument
package main
import "github.com/PumpkinSeed/structs"
type Tst struct {
Username string
Title string
Content string
}
func main() {
tst := Tst{
Username: "PumpkinSeed",
Title: "Test title",
Content: "Test content",
}
result, err := structs.Map(&ts, func(v reflect.Value) error {
if v.Type() == stringType {
v.SetString(strings.ToLower(v.String()))
}
return nil
})
}
Benchmark
BenchmarkMap-4 5000000 268 ns/op
Replace
Replace returns a copy of the struct with the first non-overlapping instance of old replaced by new, the last param (n) is the limit, if n < 0, there is no limit on the number of replacements
package main
import "github.com/PumpkinSeed/structs"
type Tst struct {
TestInt int
TestInt8 int8
TestInt16 int16
TestInt32 int32
TestInt64 int64
TestString1 string
TestString2 string
TestString3 string
TestString4 string
TestBool bool
TestFloat32 float32
TestFloat64 float64
}
func main() {
tst := Tst{
TestInt: 12,
TestInt8: 42,
TestInt16: 55,
TestInt32: 33,
TestInt64: 78,
TestString1: "test",
TestString2: "test",
TestString3: "test",
TestString4: "test",
TestBool: false,
TestFloat32: 13.444,
TestFloat64: 16.444,
}
result, err := structs.Replace(&ts, "test", "new", 2)
}
Benchmark
BenchmarkReplace-4 2000000 655 ns/op
ToDo
- Upgrade GoDoc
- Implement Map
*Note that all licence references and agreements mentioned in the structs README section above
are relevant to that project's source code only.