package main import ( "fmt" "io" ) // generates Find() and some other stuff func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT string, sortvals *Sort, childVar *MsgVar) string { LOCK := msg.getLockname("x") if childVar.VarType != "string" { return "" } VARNAME := sortvals.VarName VARTYPE := sortvals.VarType COLOR := childVar.VarName funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(s string) *" + VARTYPE fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR) fmt.Fprintln(w, funcdef, "{") fmt.Fprintln(w, " if x == nil {") fmt.Fprintln(w, " return nil") fmt.Fprintln(w, " }") fmt.Fprintln(w, "") fmt.Fprintln(w, " "+LOCK+".RLock()") fmt.Fprintln(w, " defer "+LOCK+".RUnlock()") fmt.Fprintln(w, "") fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {") fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == s {") fmt.Fprintln(w, " return x."+VARNAME+"[i]") fmt.Fprintln(w, " }") fmt.Fprintln(w, " }") fmt.Fprintln(w, " return nil") fmt.Fprintln(w, "}") fmt.Fprintln(w, "") return funcdef }