This package contains helper functions for Golang applications.
Minimal required Golang version: v1.16.
go get github.com/julyskies/gohelpers-
IncludesInt(slice []int, value int) boolThis helper function returns a boolean value if a slice of
intvalues contains a specifiedintvalue.Example:
slice := []int{1, 2, 4, 9} result := gohelpers.IncludesInt(slice, 8) fmt.Println(result) // false
-
IncludesString(slice []string, value string) boolThis helper function returns a boolean value if slice of
stringvalues contains a specifiedstringvalue.Example:
slice := []string{"a", "b", "c"} result := gohelpers.IncludesString(slice, "a") fmt.Println(result) // true
-
MakeTimestamp() int64This helper function returns a UNIX timestamp in milliseconds.
Example:
timestamp := gohelpers.MakeTimestamp() fmt.Println(timestamp) // 1627987461201
-
MakeTimestampSeconds() int64This helper function returns a UNIX timestamp in seconds.
Example:
timestamp := gohelpers.MakeTimestampSeconds() fmt.Println(timestamp) // 1713957122
-
RandomString(length int) stringThis helper function returns a random alphanumeric string of the provided length.
Example:
randomString := gohelpers.RandomString(8) fmt.Println(randomString) // A9is5Try
-
StructFields(value interface{}) ([]string, error)This helper function returns a slice of struct field names (similar to
Object.keys()in Javascript). Method names are not included. Thevalueargument should be a struct. Both public and private struct field names are returned.ObjectKeysis an alias for this function.Please notice: this function will not return field names for the nested structs.
Example:
type someStruct struct { A int B string private bool Public int } fields, _ := gohelpers.StructFields(someStruct{}) fmt.Println(fields) // [A B private Public] // method names are not returned func (s someStruct) myMethod() string { return s.B } fields, _ = gohelpers.StructFields(someStruct{}) fmt.Println(fields) // [A B private Public] // working with nesting is not supported type withNesting struct { SomeStruct someStruct J int K string } fields, _ = gohelpers.StructFields(withNesting{}) fmt.Println(fields) // [SomeStruct J K] // handling an error result, err := gohelpers.StructFields("not a struct") if err != nil { fmt.Println(result) // [] fmt.Println(err.Error()) // provided argument type is not a struct }
-
StructFieldsJson(value interface{}, params gohelpers.StructKeysJsonParams) ([]string, error)This helper function returns a slice of struct field JSON tags (similar to
Object.keys()in Javascript). Method names are not included. Thevalueargument should be a struct. Both public and private struct field JSON tags are returned.ObjectKeysJsonis an alias for this function.Please notice: this function will not return field names for the nested structs.
This function requires a second argument -
gohelpers.StructKeysJsonParamsstruct, where you can specify the following options:type StructKeysJsonParams struct { SkipIgnoredFields bool SkipMissingFields bool }
-
SkipIgnoredFieldsfield determines if ignored JSON tags should be skipped (i. e.json:"-"andjson:"-,omitempty"). If ignored fields are skipped, resulting slice will not include these struct fields. If they are not skipped, default field name will be included in resulting slice. -
SkipMissingFieldsfield determines if missing or empty JSON tags should be skipped (i. e. if there is no JSON tag for a field, or if JSON tag equals tojson:"",json:",omitempty"orjson:","). If missing fields are skipped, resulting slice will not include these struct fields. If they are not skipped, default field name will be included in resulting slice.
Default options for this function available as
gohelpers.DefaultStructKeysJsonParams:// Skip ignored fields: false -> ignored JSON tags will be replaced with default field names. // Skip missing fields: false -> default field names will be used instead of missing JSON tags. var DefaultStructKeysJsonParams = StructKeysJsonParams{ SkipIgnoredFields: false, SkipMissingFields: false, }
Example:
package main import ( "fmt" "github.com/julyskies/gohelpers" ) type User struct { Age uint8 `json:""` FirstName string `json:"firstName"` LastName string `json:"lastName"` Password string `json:"-"` role string Status string `json:"status,omitempty"` } func main() { // get all fields and available JSON tags fields, _ := gohelpers.StructFieldsJson( User{}, gohelpers.DefaultStructKeysJsonParams, ) fmt.Println(fields) // [Age firstName lastName Password role status] // get all non-ignored fields and JSON tags params := gohelpers.StructKeysJsonParams{ SkipIgnoredFields: true, SkipMissingFields: false, } fields, _ = gohelpers.StructFieldsJson(User{}, params) fmt.Println(fields) // [Age firstName lastName Role status] // get all non-missing fields and JSON tags params = gohelpers.StructKeysJsonParams{ SkipIgnoredFields: false, SkipMissingFields: true, } fields, _ = gohelpers.StructFieldsJson(User{}, params) fmt.Println(fields) // [firstName lastName Password status] // skip ignored and missing tags / fields params = gohelpers.StructKeysJsonParams{ SkipIgnoredFields: true, SkipMissingFields: true, } fields, _ = gohelpers.StructFieldsJson(User{}, params) fmt.Println(fields) // [firstName lastName status] // handling an error result, err := gohelpers.StructFieldsJson( "not a struct", gohelpers.StructKeysJsonParams{ SkipIgnoredFields: true, SkipMissingFields: true, }, ) if err != nil { fmt.Println(result) // [] fmt.Println(err.Error()) // provided argument type is not a struct } }
-
-
StructValues(value interface{}) []stringThis helper function returns a slice of values as strings. These values are taken from the provided
struct. This function is similar toObject.values()in Javascript. Methods are not returned.ObjectValuesis an alias for this function.Please notice: nested struct values are returned as a single string.
Example:
type animalsStruct struct { Elephant string Hippo string Lion string } animals := animalsStruct{ Elephant: "elephant", Hippo: "hippo", Lion: "lion", } values := gohelpers.StructValues(animals) fmt.Println(values) // [elephant, hippo, lion] // nested struct type nestedAnimals struct { AnimalsStruct animalsStruct Cat string Dog string } moreAnimals := nestedAnimals{ AnimalsStruct: animalsStruct{ Elephant: "elephant", Hippo: "hippo", Lion: "lion", }, Cat: "cat", Dog: "dog", } values := gohelpers.StructValues(moreAnimals) fmt.Println(values) // [{elephant hippo lion} cat dog]
Aliases are added for compatibility.
-
ObjectKeys(value interface{}) ([]string, error)This is an alias for
StructFieldsfunction. -
ObjectKeysJson(value interface{}, params gohelpers.StructKeysJsonParams) ([]string, error)This is an alias for
StructFieldsJsonfunction. -
ObjectValues(value interface{}) []stringThis is an alias for
StructValuesfunction.
Tests are located in helpers_test.go
Run tests:
go test