template.go
func ExecuteFunc(template, startTag, endTag string, w io.Writer, f TagFunc) (int64, error) {
	s := unsafeString2Bytes(template)
	a := unsafeString2Bytes(startTag)
	b := unsafeString2Bytes(endTag)

	var nn int64
	var ni int
	var err error
	for {
		n := bytes.Index(s, a)
		if n < 0 {
			break
		}
		ni, err = w.Write(s[:n])
		nn += int64(ni)
		if err != nil {
			return nn, err
		}

		s = s[n+len(a):]
		n = bytes.Index(s, b)
		if n < 0 {
			// cannot find end tag - just write it to the output.
			ni, _ = w.Write(a)
			nn += int64(ni)
			break
		}

		ni, err = f(w, unsafeBytes2String(s[:n]))
		nn += int64(ni)
		s = s[n+len(b):]
	}
	ni, err = w.Write(s)
	nn += int64(ni)

	return nn, err
}
func ExecuteFunc(template, startTag, endTag string, w io.Writer, f TagFunc) (int64, error) {
	s := unsafeString2Bytes(template)
	a := unsafeString2Bytes(startTag)
	b := unsafeString2Bytes(endTag)

	var nn int64
	var ni int
	var err error
	for {
		n := bytes.Index(s, a)
		if n < 0 {
			break
		}
		ni, err = w.Write(s[:n])
		nn += int64(ni)
		if err != nil {
			return nn, err
		}

		s = s[n+len(a):]
		n = bytes.Index(s, b)
		if n < 0 {
			// cannot find end tag - just write it to the output.
			ni, _ = w.Write(a)
			nn += int64(ni)
			break
		}

		ni, err = f(w, unsafeBytes2String(s[:n]))
		nn += int64(ni)
		s = s[n+len(b):]
	}
	ni, err = w.Write(s)
	nn += int64(ni)

	return nn, err
}
func ExecuteFunc ( template , startTag , endTag string , w io . Writer , f TagFunc ) ( int64 , error ) { s := unsafeString2Bytes ( template ) a := unsafeString2Bytes ( startTag ) b := unsafeString2Bytes ( endTag ) var nn int64 var ni int var err error for { n := bytes . Index ( s , a ) if n < 0 { break } ni , err = w . Write ( s [ : n ] ) nn += int64 ( ni ) if err != nil { return nn , err } s = s [ n + len ( a ) : ] n = bytes . Index ( s , b ) if n < 0 { // cannot find end tag - just write it to the output. ni , _ = w . Write ( a ) nn += int64 ( ni ) break } ni , err = f ( w , unsafeBytes2String ( s [ : n ] ) ) nn += int64 ( ni ) s = s [ n + len ( b ) : ] } ni , err = w . Write ( s ) nn += int64 ( ni ) return nn , err }
// ExecuteFunc calls f on each template tag (placeholder) occurrence.
//
// Returns the number of bytes written to w.
//
// This function is optimized for constantly changing templates.
// Use Template.ExecuteFunc for frozen templates.
ExecuteFunc calls f on each template tag ( placeholder ) occurrence . Returns the number of bytes written to w . This function is optimized for constantly changing templates . Use Template . ExecuteFunc for frozen templates .