vendredi 27 novembre 2015

Go Differentiate Between Structs with same name in the same package

Background:

I am trying to cache some struct information for efficiency but am having trouble differentiating between struct with the same name, within the same package.

Example Code:

func Struct(s interface{}){
  val := reflect.ValueOf(s)
  typ := val.Type()

  // cache in map, but with what key? 
  typ.Name()               // not good enough
  typ.PkgPath + typ.Name() // not good enough
}

func Caller1() {
  type Test struct {
    Name string
  }

  t:= Test{
    Name:"Test Name",
  }

  Struct(t)
}

func Caller2() {
  type Test struct {
    Address string
    Other string
  }

  t:= Test{
    Address:"Test Address",
    Other:"OTHER",
  }

  Struct(t)
}

Problem

Can't find a proper unique key as:

  • Name is the same "Test"
  • PkgPath with be identical as both functions are in same package
  • Pointers etc is out because need a consistent key otherwise caching would be pointless

Can anyone help in finding a way to uniquely identify these structs?

P.S. I do realize that changing of the struct name would solve the issue, but need to handle this scenario as I have a generic library that others will be calling and may have the structs defined like the above example.





Aucun commentaire:

Enregistrer un commentaire