structs

package
v0.3.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2024 License: GPL-3.0 Imports: 8 Imported by: 0

README

Hash Quick start

package main

import (
    "fmt"
    "crypto/md5"
    "crypto/sha1"
    "github.com/buzzxu/boys/common/structs"
)

type S struct {
    Str string
    Num int
}

func main() {
    s := S{"hello", 123}

    hash, err := structs.Hash(s, 1)
    if err != nil {
        panic(err)
    }
    fmt.Println(hash)
    // Prints: v1_41011bfa1a996db6d0b1075981f5aa8f

    fmt.Println(structs.Version(hash))
    // Prints: 1

    fmt.Printf("%x\n", structs.Md5(s, 1))
    // Prints: 41011bfa1a996db6d0b1075981f5aa8f

    fmt.Printf("%x\n", structs.Sha1(s, 1))
    // Prints: 5ff72df7212ce8c55838fb3ec6ad0c019881a772

    fmt.Printf("%x\n", md5.Sum(structs.Dump(s, 1)))
    // Prints: 41011bfa1a996db6d0b1075981f5aa8f

    fmt.Printf("%x\n", sha1.Sum(structs.Dump(s, 1)))
    // Prints: 5ff72df7212ce8c55838fb3ec6ad0c019881a772
}

Struct tags

structhash supports struct tags in the following forms:

  • hash:"-", or
  • hash:"name:{string} version:{number} lastversion:{number} method:{string}"

All fields are optional and may be ommitted. Their semantics is:

  • - - ignore field
  • name:{string} - rename field (may be useful when you want to rename field but keep hashes unchanged for backward compatibility)
  • version:{number} - ignore field if version passed to structhash is smaller than given number
  • lastversion:{number} - ignore field if version passed to structhash is greater than given number
  • method:{string} - use the return value of a field's method instead of the field itself

Example:

type MyStruct struct {
    Ignored    string `hash:"-"`
    Renamed    string `hash:"name:OldName version:1"`
    Legacy     string `hash:"version:1 lastversion:2"`
    Serialized error  `hash:"method:Error"`
}

Nil values

When hash is calculated, nil pointers, nil slices, and nil maps are treated equally to zero values of corresponding type. E.g., nil pointer to string is equivalent to empty string, and nil slice is equivalent to empty slice.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Dump

func Dump(c interface{}, version int) []byte

Dump takes a data structure and returns its byte representation. This can be useful if you need to use your own hashing function or formatter.

func Hash

func Hash(c interface{}, version int) (string, error)

Hash takes a data structure and returns a hash string of that data structure at the version asked.

This function uses md5 hashing function and default formatter. See also Dump() function.

func Md5

func Md5(c interface{}, version int) []byte

Md5 takes a data structure and returns its md5 hash. This is a shorthand for md5.Sum(Dump(c, version)).

func Sha1

func Sha1(c interface{}, version int) []byte

Sha1 takes a data structure and returns its sha1 hash. This is a shorthand for sha1.Sum(Dump(c, version)).

func Version

func Version(h string) int

Version returns the version of the supplied hash as an integer or -1 on failure

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL