github.com/chrislusf/greenpack@v3.7.1-0.20170911073826-ad5bd10b7c47+incompatible/msgp/clue.go (about) 1 package msgp 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 func Clue2Field(name string, clue string, zid int64) string { 10 if zid >= 0 { 11 return fmt.Sprintf("%s_zid%02d_%s", name, zid, clue) 12 } 13 // handle the missing zid, and don't write -1 as the zid. 14 return fmt.Sprintf("%s__%s", name, clue) 15 } 16 17 func Field2Clue(fieldname string) (name string, clue string, zid int64, err error) { 18 parts := strings.Split(fieldname, "_") 19 n := len(parts) 20 if n < 3 { 21 err = fmt.Errorf("too few underscore (expect at least two) in fieldname '%s'", fieldname) 22 return 23 } 24 clue = parts[n-1] 25 if strings.HasPrefix(parts[n-2], "zid") { 26 tmp, err2 := strconv.Atoi(parts[n-2][3:]) 27 if err2 == nil { 28 zid = int64(tmp) 29 } else { 30 err = fmt.Errorf("problem parsing out _zid field in fieldname '%s': '%v'", fieldname, err2) 31 return 32 } 33 } 34 used := len(parts[n-1]) + len(parts[n-2]) + 2 35 name = fieldname[:len(fieldname)-used] 36 return 37 }