func(t *TextProcessor) set_variable(key, value string) { if _, ok := t.record[key]; ok { print("[warning] key exists!") t.record[key] = value } else { t.record[key] = value } }
func(t *TextProcessor) get_text(text string) string { // -1:正常 0 :[剩下来的字符串当tag, flag := -1 res := "" tag := "" for _, v := range text { if flag == -1 { if v != '[' { res += string(v) } else { flag = 0 } } else { if flag == 0 { if v != ']' { tag += string(v) } else { if tagStr, ok := t.record[tag]; ok { res += tagStr tag = "" } flag = -1 } } } } return res }
// A Builder is used to efficiently build a string using Write methods. // It minimizes memory copying. The zero value is ready to use. // Do not copy a non-zero Builder. type Builder struct { addr *Builder // of receiver, to detect copies by value buf []byte }
func(b *Builder) copyCheck() { if b.addr == nil { // This hack works around a failing of Go's escape analysis // that was causing b to escape and be heap allocated. // See issue 23382. // TODO: once issue 7921 is fixed, this should be reverted to // just "b.addr = b". b.addr = (*Builder)(noescape(unsafe.Pointer(b))) } elseif b.addr != b { panic("strings: illegal use of non-zero Builder copied by value") } }