This is a creation in Article, where the information may have evolved or changed.
Package Mainimport ("Encoding/xml" "FMT" "Mahonia" "OS" "StrConv" "text/template") type Attribute struct {Name stringvalue String}type Token struct {Name stringattributes []attributetokens []token}type Result struct {Root Token}var res Ult = Result{}func Main () {if!parse ("config. *") {return}if!output ("Code_h.tpl", "Code.h") {return}if!output ("Code_ Cpp.tpl "," Code.cpp ") {return}fmt. Println ("OK")}func Parse_token (decoder *xml. Decoder, TT XML. token, MyToken *token) {token: = TT. ( Xml. startelement) Name: = token. Name.Localmytoken.Name = Namefor _, attr: = Range token. Attr {attrname: = Attr. Name.localattrvalue: = attr. Valueattr: = Attribute{name:attrname, Value:attrvalue}mytoken. Attributes = Append (MyToken. Attributes, attr)}var t XML. Tokenvar err errorfor t, err = decoder. Token (); Err = = Nil; T, Err = decoder. Token () {switch T. (type) {//Process element start (label) case XML. Startelement:mytoken. Tokens = Append (MyToken. Tokens, token{}) Parse_token (decoder, T, &mytoken. Tokens[len (MyToken. Tokens)-1])//Process element End (label) case XML. Endelement:returncase XML. Chardata:default:return}}}func Parse (filename string) bool {file, err: = OS. Open (filename) if err! = Nil {fmt. PRINTLN (ERR) return False}var t XML. Tokendecoder: = XML. Newdecoder (file) T, Decerr: = decoder. Token () if decerr! = nil {fmt. Println (Decerr) return False}parse_token (decoder, T, &result. Root) fmt. PRINTLN ("result", result.) Root) return True}func genlist (n string) []string {num, _: = StrConv. Atoi (n) Ret: = Make ([]string, num) for I: = 0; i < num; i++ {Ret[i] = StrConv. Itoa (i)}return ret}func iconv (str string) string {enc: = Mahonia. Newencoder ("gb2312") return ENC. Convertstring (str)}func output (src string, des String) bool {file, err: = OS. Create (DES) if err! = Nil {fmt. PRINTLN (ERR) return false}t: = template. New ("text") if err! = Nil {fmt. PRINTLN (err) return false}t = T.funcs (template. funcmap{"Genlist": Genlist, "Iconv": Iconv}) Srcfile, err: = OS. Open (SRC) if err! = Nil {fmt. PRINTLN (ERR) return False}var buffer [1024x768 * 1024]byten, Rerr: = srcFile. Read (buffer[0:]) if rerr! = nil {fmt. Println (Rerr) return false}t, err = T.parse (String (buffer[0:n])) if err! = Nil {fmt. PRINTLN (err) return false}err = T.execute (file, result. Root) If err! = Nil {fmt. PRINTLN (ERR) return False}return true}