github.com/wangyougui/gf/v2@v2.6.5/util/gtag/gtag_func.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package gtag
     8  
     9  import (
    10  	"regexp"
    11  
    12  	"github.com/wangyougui/gf/v2/errors/gerror"
    13  )
    14  
    15  var (
    16  	data  = make(map[string]string)
    17  	regex = regexp.MustCompile(`\{(.+?)\}`)
    18  )
    19  
    20  // Set sets tag content for specified name.
    21  // Note that it panics if `name` already exists.
    22  func Set(name, value string) {
    23  	if _, ok := data[name]; ok {
    24  		panic(gerror.Newf(`value for tag name "%s" already exists`, name))
    25  	}
    26  	data[name] = value
    27  }
    28  
    29  // SetOver performs as Set, but it overwrites the old value if `name` already exists.
    30  func SetOver(name, value string) {
    31  	data[name] = value
    32  }
    33  
    34  // Sets sets multiple tag content by map.
    35  func Sets(m map[string]string) {
    36  	for k, v := range m {
    37  		Set(k, v)
    38  	}
    39  }
    40  
    41  // SetsOver performs as Sets, but it overwrites the old value if `name` already exists.
    42  func SetsOver(m map[string]string) {
    43  	for k, v := range m {
    44  		SetOver(k, v)
    45  	}
    46  }
    47  
    48  // Get retrieves and returns the stored tag content for specified name.
    49  func Get(name string) string {
    50  	return data[name]
    51  }
    52  
    53  // Parse parses and returns the content by replacing all tag name variable to
    54  // its content for given `content`.
    55  // Eg:
    56  // gtag.Set("demo", "content")
    57  // Parse(`This is {demo}`) -> `This is content`.
    58  func Parse(content string) string {
    59  	return regex.ReplaceAllStringFunc(content, func(s string) string {
    60  		if v, ok := data[s[1:len(s)-1]]; ok {
    61  			return v
    62  		}
    63  		return s
    64  	})
    65  }