All skills
gogf avatar

/goframe-v2

@911705d
by GoFramegogf/skills81 stars
3

GoFrame v2 development skill. Use only when the target Go project uses or is explicitly adopting GoFrame v2: the nearest go.mod requires github.com/gogf/gf/v2, existing Go files import github.com/gogf/gf/v2 or any github.com/gogf/gf/v2/... component package, or the user asks to scaffold, migrate, or build with GoFrame. Trigger for GoFrame-backed Go work such as APIs/controllers/services, middleware, routing/config, ORM/DAO/DO/entity/database operations, gf CLI/codegen, HTTP/gRPC services, and microservice conventions. Do not trigger for generic Go projects without GoFrame evidence, frontend-only work, shell scripts, or unrelated infrastructure tasks.

Use this Skill: https://skilld.dev/gh/gogf/skills/goframe-v2

This session only. Nothing lands on disk.

references组件列表文本处理字符串处理-gstr.md

gstr 提供了强大便捷的文本处理组件,组件内置了大量常用的字符串处理方法,比较于 Golang 标准库更加全面丰富,可应对绝大部分业务场景。

使用方式:

import "github.com/gogf/gf/v2/text/gstr"

接口文档:

https://pkg.go.dev/github.com/gogf/gf/v2/text/gstr :::tip 以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/text/gstr :::

字符串判断

IsNumeric

  • 说明:IsNumeric 验证字符串 s 是否为数字。

  • 格式:

IsNumeric(s string) bool
  • 示例:
func ExampleIsNumeric() {
      fmt.Println(gstr.IsNumeric("88"))
      fmt.Println(gstr.IsNumeric("3.1415926"))
      fmt.Println(gstr.IsNumeric("abc"))
      // Output:
      // true
      // true
      // false
}

字符串长度

LenRune

  • 说明:LenRune 返回 unicode 字符串长度。

  • 格式:

LenRune(str string) int
  • 示例:
func ExampleLenRune() {
      var (
          str    = `GoFrame框架`
          result = gstr.LenRune(str)
      )
      fmt.Println(result)

      // Output:
      // 9
}

字符串创建

Repeat

  • 说明:Repeat 返回一个由 input 重复 multiplier 次后组成的新字符串。

  • 格式:

Repeat(input string, multiplier int) string
  • 示例:
func ExampleRepeat() {
      var (
          input      = `goframe `
          multiplier = 3
          result     = gstr.Repeat(input, multiplier)
      )
      fmt.Println(result)

      // Output:
      // goframe goframe goframe
}

大小写转换

ToLower

  • 说明:ToLower 将 s 中所有 Unicode 字符都变为小写并返回其副本。

  • 格式:

ToLower(s string) string
  • 示例:
func ExampleToLower() {
      var (
          s      = `GOFRAME`
          result = gstr.ToLower(s)
      )
      fmt.Println(result)

      // Output:
      // goframe
}

ToUpper

  • 说明:ToUpper 将 s 中所有 Unicode 字符都变为大写并返回其副本。

  • 格式:

ToUpper(s string) string
  • 示例:
func ExampleToUpper() {
      var (
          s      = `goframe`
          result = gstr.ToUpper(s)
      )
      fmt.Println(result)

      // Output:
      // GOFRAME
}

UcFirst

  • 说明:UcFirst 将 s 中首字符变为大写并返回其副本。

  • 格式:

UcFirst(s string) string
  • 示例:
func ExampleUcFirst() {
      var (
          s      = `hello`
          result = gstr.UcFirst(s)
      )
      fmt.Println(result)

      // Output:
      // Hello
}

LcFirst

  • 说明: LcFirst 将 s 中首字符变为小写并返回其副本。

  • 格式:

LcFirst(s string) string
  • 示例:
func ExampleLcFirst() {
      var (
          str    = `Goframe`
          result = gstr.LcFirst(str)
      )
      fmt.Println(result)

      // Output:
      // goframe
}

UcWords

  • 说明: UcWords 将字符串 str 中每个单词的第一个字符变为大写。

  • 格式:

UcWords(str string) string
  • 示例:
func ExampleUcWords() {
      var (
          str    = `hello world`
          result = gstr.UcWords(str)
      )
      fmt.Println(result)

      // Output:
      // Hello World
}

IsLetterLower

  • 说明:IsLetterLower 验证给定的字符 b 是否是小写字符。

  • 格式:

IsLetterLower(b byte) bool
  • 示例:
func ExampleIsLetterLower() {
      fmt.Println(gstr.IsLetterLower('a'))
      fmt.Println(gstr.IsLetterLower('A'))

      // Output:
      // true
      // false
}

IsLetterUpper

  • 说明:IsLetterUpper 验证字符 b 是否是大写字符。

  • 格式:

IsLetterUpper(b byte) bool
  • 示例:
func ExampleIsLetterUpper() {
      fmt.Println(gstr.IsLetterUpper('A'))
      fmt.Println(gstr.IsLetterUpper('a'))

      // Output:
      // true
      // false
}

字符串比较

Compare

  • 说明:Compare 返回一个按字典顺序比较两个字符串的整数。 如果 a == b,结果为 0,如果 a < b,结果为 -1,如果 a > b,结果为 +1。

  • 格式:

Compare(a, b string) int
  • 示例:
func ExampleCompare() {
      fmt.Println(gstr.Compare("c", "c"))
      fmt.Println(gstr.Compare("a", "b"))
      fmt.Println(gstr.Compare("c", "b"))

      // Output:
      // 0
      // -1
      // 1
}

Equal

  • 说明: Equal 返回 a 和 b 在不区分大小写的情况下是否相等。

  • 格式:

Equal(a, b string) bool
  • 示例:
func ExampleEqual() {
      fmt.Println(gstr.Equal(`A`, `a`))
      fmt.Println(gstr.Equal(`A`, `A`))
      fmt.Println(gstr.Equal(`A`, `B`))

      // Output:
      // true
      // true
      // false
}

切分组合

Split

  • 说明:Split 用 delimiter 将 str 拆分为 []string。

  • 格式:

Split(str, delimiter string) []string
  • 示例:
func ExampleSplit() {
      var (
          str       = `a|b|c|d`
          delimiter = `|`
          result    = gstr.Split(str, delimiter)
      )
      fmt.Printf(`%#v`, result)

      // Output:
      // []string{"a", "b", "c", "d"}
}

SplitAndTrim

  • 说明:SplitAndTrim 使用 delimiter 将 str 拆分为 []string,并对 []string 的每个元素调用 Trim,并忽略在 Trim 之后为空的元素。

  • 格式:

SplitAndTrim(str, delimiter string, characterMask ...string) []string
  • 示例:
func ExampleSplitAndTrim() {
      var (
          str       = `a|b|||||c|d`
          delimiter = `|`
          result    = gstr.SplitAndTrim(str, delimiter)
      )
      fmt.Printf(`%#v`, result)

      // Output:
      // []string{"a", "b", "c", "d"}
}

Join

  • 说明: Join 将 array 中的每一个元素连接并生成一个新的字符串。参数 sep 会作为新字符串的分隔符。

  • 格式:

Join(array []string, sep string) string
  • 示例:
func ExampleJoin() {
      var (
          array  = []string{"goframe", "is", "very", "easy", "to", "use"}
          sep    = ` `
          result = gstr.Join(array, sep)
      )
      fmt.Println(result)

      // Output:
      // goframe is very easy to use
}

JoinAny

  • 说明: JoinAny 将 array 中的每一个元素连接并生成一个新的字符串。参数 sep 会作为新字符串的分隔符。参数 array 可以是任意的类型。

  • 格式:

JoinAny(array interface{}, sep string) string
  • 示例:
func ExampleJoinAny() {
      var (
          sep    = `,`
          arr2   = []int{99, 73, 85, 66}
          result = gstr.JoinAny(arr2, sep)
      )
      fmt.Println(result)

      // Output:
      // 99,73,85,66
}

Explode

  • 说明: Explode 使用分隔符 delimiter 字符串 str 拆分成 []string

  • 格式:

Explode(delimiter, str string) []string
  • 示例:
func ExampleExplode() {
      var (
          str       = `Hello World`
          delimiter = " "
          result    = gstr.Explode(delimiter, str)
      )
      fmt.Printf(`%#v`, result)

      // Output:
      // []string{"Hello", "World"}
}

Implode

  • 说明: Implode 使用 glue 连接 pieces 字符串数组的每一个元素。

  • 格式:

Implode(glue string, pieces []string) string
  • 示例:
func ExampleImplode() {
      var (
          pieces = []string{"goframe", "is", "very", "easy", "to", "use"}
          glue   = " "
          result = gstr.Implode(glue, pieces)
      )
      fmt.Println(result)

      // Output:
      // goframe is very easy to use
}

ChunkSplit

  • 说明:ChunkSplit 将字符串拆分为单位为 chunkLen 长度更小的每一份,并用 end 连接每一份拆分出的字符串。

  • 格式:

ChunkSplit(body string, chunkLen int, end string) string
  • 示例:
func ExampleChunkSplit() {
      var (
          body     = `1234567890`
          chunkLen = 2
          end      = "#"
          result   = gstr.ChunkSplit(body, chunkLen, end)
      )
      fmt.Println(result)

      // Output:
      // 12#34#56#78#90#
}

Fields

  • 说明: Fields 以 []string 的形式返回字符串中的每个单词。

  • 格式:

Fields(str string) []string
  • 示例:
func ExampleFields() {
      var (
          str    = `Hello World`
          result = gstr.Fields(str)
      )
      fmt.Printf(`%#v`, result)

      // Output:
      // []string{"Hello", "World"}
}

转义处理

AddSlashes

  • 说明: AddSlashes 将字符串中的符号前添加转义字符 '\'

  • 格式:

AddSlashes(str string) string
  • 示例:
func ExampleAddSlashes() {
      var (
          str    = `'aa'"bb"cc\r\n\d\t`
          result = gstr.AddSlashes(str)
      )

      fmt.Println(result)

      // Output:
      // \'aa\'\"bb\"cc\\r\\n\\d\\t
}

StripSlashes

  • 说明: StripSlashes 去掉字符串 str 中的转义字符 '\'。

  • 格式:

StripSlashes(str string) string
  • 示例:
func ExampleStripSlashes() {
      var (
          str    = `C:\\windows\\GoFrame\\test`
          result = gstr.StripSlashes(str)
      )
      fmt.Println(result)

      // Output:
      // C:\windows\GoFrame\test
}

QuoteMeta

  • 说明:QuoteMeta 为str中' . \ + * ? [ ^ ] ( $ ) 中的每个字符前添加一个转义字符 '\'。

  • 格式:

QuoteMeta(str string, chars ...string) string
  • 示例:
func ExampleQuoteMeta() {
      {
          var (
              str    = `.\+?[^]()`
              result = gstr.QuoteMeta(str)
          )
          fmt.Println(result)
      }
      {
          var (
              str    = `https://goframe.org/pages/viewpage.action?pageId=1114327`
              result = gstr.QuoteMeta(str)
          )
          fmt.Println(result)
      }

      // Output:
      // \.\\\+\?\[\^\]\(\)
      // https://goframe\.org/pages/viewpage\.action\?pageId=1114327

}

统计计数

Count

  • 说明:Count 计算 substr 在 s 中出现的次数。  如果在 s 中没有找到 substr,则返回 0。

  • 格式:

Count(s, substr string) int
  • 示例:
func ExampleCount() {
      var (
          str     = `goframe is very, very easy to use`
          substr1 = "goframe"
          substr2 = "very"
          result1 = gstr.Count(str, substr1)
          result2 = gstr.Count(str, substr2)
      )
      fmt.Println(result1)
      fmt.Println(result2)

      // Output:
      // 1
      // 2
}

CountI

  • 说明:Count 计算 substr 在 s 中出现的次数,不区分大小写。  如果在 s 中没有找到 substr,则返回 0。

  • 格式:

CountI(s, substr string) int
  • 示例:
func ExampleCountI() {
      var (
          str     = `goframe is very, very easy to use`
          substr1 = "GOFRAME"
          substr2 = "VERY"
          result1 = gstr.CountI(str, substr1)
          result2 = gstr.CountI(str, substr2)
      )
      fmt.Println(result1)
      fmt.Println(result2)

      // Output:
      // 1
      // 2
}

CountWords

  • 说明:CountWords 以 map[string]int 的形式返回 str 中使用的单词的统计信息。

  • 格式:

CountWords(str string) map[string]int
  • 示例:
func ExampleCountWords() {
      var (
          str    = `goframe is very, very easy to use!`
          result = gstr.CountWords(str)
      )
      fmt.Printf(`%#v`, result)

      // Output:
      // map[string]int{"easy":1, "goframe":1, "is":1, "to":1, "use!":1, "very":1, "very,":1}
}

CountChars

  • 说明:CountChars 以 map[string]int 的形式返回 str 中使用的字符的统计信息。 noSpace 参数可以控制是否计算空格。

  • 格式:

CountChars(str string, noSpace ...bool) map[string]int
  • 示例:
func ExampleCountChars() {
      var (
          str    = `goframe`
          result = gstr.CountChars(str)
      )
      fmt.Println(result)

      // May Output:
      // map[a:1 e:1 f:1 g:1 m:1 o:1 r:1]
}

数组处理

SearchArray

  • 说明:SearchArray 在 []string 'a' 中区分大小写地搜索字符串 's',返回其在 'a' 中的索引。 如果在 'a' 中没有找到 's',则返回 -1。

  • 格式:

SearchArray(a []string, s string) int
  • 示例:
func ExampleSearchArray() {
      var (
          array  = []string{"goframe", "is", "very", "nice"}
          str    = `goframe`
          result = gstr.SearchArray(array, str)
      )
      fmt.Println(result)

      // Output:
      // 0
}

InArray

  • 说明:InArray校验 []string 'a' 中是否有字符串 ' s '。

  • 格式:

InArray(a []string, s string) bool
  • 示例:
func ExampleInArray() {
      var (
          a      = []string{"goframe", "is", "very", "easy", "to", "use"}
          s      = "goframe"
          result = gstr.InArray(a, s)
      )
      fmt.Println(result)

      // Output:
      // true
}

PrefixArray

  • 说明: PrefixArray 位 []string array 的每一个字符串添加 'prefix' 的前缀。

  • 格式:

PrefixArray(array []string, prefix string)
  • 示例:
func ExamplePrefixArray() {
      var (
          strArray = []string{"tom", "lily", "john"}
      )

      gstr.PrefixArray(strArray, "classA_")

      fmt.Println(strArray)

      // Output:
      // [classA_tom classA_lily classA_john]
}

命名转换

CaseCamel

  • 说明: CaseCamel 将字符串转换为大驼峰形式(首字母大写)。

  • 格式:

CaseCamel(s string) string
  • 示例:
func ExampleCaseCamel() {
      var (
          str    = `hello world`
          result = gstr.CaseCamel(str)
      )
      fmt.Println(result)

      // Output:
      // HelloWorld
}

CaseCamelLower

  • 说明: CaseCamelLower 将字符串转换为小驼峰形式(首字母小写)。

  • 格式:

CaseCamelLower(s string) string
  • 示例:
func ExampleCaseCamelLower() {
      var (
          str    = `hello world`
          result = gstr.CaseCamelLower(str)
      )
      fmt.Println(result)

      // Output:
      // helloWorld
}

CaseSnake

  • 说明: CaseSnake 将字符串转换中的符号(下划线,空格,点,中横线)用下划线( _ )替换,并全部转换为小写字母。

  • 格式:

CaseSnake(s string) string
  • 示例:
func ExampleCaseSnake() {
      var (
          str    = `hello world`
          result = gstr.CaseSnake(str)
      )
      fmt.Println(result)

      // Output:
      // hello_world
}

CaseSnakeScreaming

  • 说明: CaseSnakeScreaming 把字符串中的符号(下划线,空格,点,中横线),全部替换为下划线 '_',并将所有英文字母转为大写。

  • 格式:

CaseSnakeScreaming(s string) string
  • 示例:
func ExampleCaseSnakeScreaming() {
      var (
          str    = `hello world`
          result = gstr.CaseSnakeScreaming(str)
      )
      fmt.Println(result)

      // Output:
      // HELLO_WORLD
}

CaseSnakeFirstUpper

  • 说明: CaseSnakeFirstUpper 将字符串中的字母为大写时,将大写字母转换为小写字母并在其前面增加一个下划线 '_',首字母大写时,只转换为小写,前面不增加下划线 '_'。

  • 格式:

CaseSnakeFirstUpper(word string, underscore ...string) string
  • 示例:
func ExampleCaseSnakeFirstUpper() {
      var (
          str    = `RGBCodeMd5`
          result = gstr.CaseSnakeFirstUpper(str)
      )
      fmt.Println(result)

      // Output:
      // rgb_code_md5
}

CaseKebab

  • 说明: CaseKebab 将字符串转换中的符号(下划线,空格,点,)用中横线 '-' 替换,并全部转换为小写字母。

  • 格式:

CaseKebab(s string) string
  • 示例:
func ExampleCaseKebab() {
      var (
          str    = `hello world`
          result = gstr.CaseKebab(str)
      )
      fmt.Println(result)

      // Output:
      // hello-world
}

CaseKebabScreaming

  • 说明: CaseKebabScreaming 将字符串转换中的符号(下划线,空格,点,中横线)用中横线 '-' 替换,并全部转换为大写字母。

  • 格式:

CaseKebabScreaming(s string) string
  • 示例:
func ExampleCaseKebabScreaming() {
      var (
          str    = `hello world`
          result = gstr.CaseKebabScreaming(str)
      )
      fmt.Println(result)

      // Output:
      // HELLO-WORLD
}

CaseDelimited

  • 说明: CaseDelimited 将字符串转换中的符号进行替换。

  • 格式:

CaseDelimited(s string, del byte) string
  • 示例:
func ExampleCaseDelimited() {
      var (
          str    = `hello world`
          del    = byte('-')
          result = gstr.CaseDelimited(str, del)
      )
      fmt.Println(result)

      // Output:
      // hello-world
}

CaseDelimitedScreaming

  • 说明: CaseDelimitedScreaming 将字符串中的符号(空格,下划线,点,中横线)用第二个参数进行替换,该函数第二个参数为替换的字符,第三个参数为大小写转换, true 为全部转换大写字母, false 为全部转为小写字母。

  • 格式:

CaseDelimitedScreaming(s string, del uint8, screaming bool) string
  • 示例:
func ExampleCaseDelimitedScreaming() {
      {
          var (
              str    = `hello world`
              del    = byte('-')
              result = gstr.CaseDelimitedScreaming(str, del, true)
          )
          fmt.Println(result)
      }
      {
          var (
              str    = `hello world`
              del    = byte('-')
              result = gstr.CaseDelimitedScreaming(str, del, false)
          )
          fmt.Println(result)
      }

      // Output:
      // HELLO-WORLD
      // hello-world
}

包含判断

Contains

  • 说明: Contains 返回字符串 str 是否包含子字符串 substr,区分大小写。

  • 格式:

Contains(str, substr string) bool
  • 示例:
func ExampleContains() {
      {
          var (
              str    = `Hello World`
              substr = `Hello`
              result = gstr.Contains(str, substr)
          )
          fmt.Println(result)
      }
      {
          var (
              str    = `Hello World`
              substr = `hello`
              result = gstr.Contains(str, substr)
          )
          fmt.Println(result)
      }

      // Output:
      // true
      // false
}

ContainsI

  • 说明:ContainsI 校验 substr 是否在 str 中,不区分大小写。

  • 格式:

ContainsI(str, substr string) bool
  • 示例:
func ExampleContainsI() {
      var (
          str     = `Hello World`
          substr  = "hello"
          result1 = gstr.Contains(str, substr)
          result2 = gstr.ContainsI(str, substr)
      )
      fmt.Println(result1)
      fmt.Println(result2)

      // Output:
      // false
      // true
}

ContainsAny

  • 说明:ContainsAny 校验 s 中是否包含 chars。

  • 格式:

ContainsAny(s, chars string) bool
  • 示例:
func ExampleContainsAny() {
      {
          var (
              s      = `goframe`
              chars  = "g"
              result = gstr.ContainsAny(s, chars)
          )
          fmt.Println(result)
      }
      {
          var (
              s      = `goframe`
              chars  = "G"
              result = gstr.ContainsAny(s, chars)
          )
          fmt.Println(result)
      }

      // Output:
      // true
      // false
}

字符串转换

Chr

  • 说明:Chr 返回一个数字 0-255 对应的 ascii 字符串。

  • 格式:

Chr(ascii int) string
  • 示例:
func ExampleChr() {
      var (
          ascii  = 65 // A
          result = gstr.Chr(ascii)
      )
      fmt.Println(result)

      // Output:
      // A
}

Ord

  • 说明:Ord 将字符串的第一个字节转换为 0-255 之间的值。

  • 格式:

Ord(char string) int
  • 示例:
func ExampleOrd() {
      var (
          str    = `goframe`
          result = gstr.Ord(str)
      )

      fmt.Println(result)

      // Output:
      // 103
}

OctStr

  • 说明:OctStr 将字符串 str 中的八进制字符串转换为其原始字符串。

  • 格式:

OctStr(str string) string
  • 示例:
func ExampleOctStr() {
      var (
          str    = `\346\200\241`
          result = gstr.OctStr(str)
      )
      fmt.Println(result)

      // Output:
      // 怡
}

Reverse

  • 说明:Reverse 返回 str 的反转字符串。

  • 格式:

Reverse(str string) string
  • 示例:
func ExampleReverse() {
      var (
          str    = `123456`
          result = gstr.Reverse(str)
      )
      fmt.Println(result)

      // Output:
      // 654321
}

NumberFormat

  • 说明:NumberFormat 以千位分组来格式化数字。

    • 参数 decimal 设置小数点的个数。
    • 参数 decPoint 设置小数点的分隔符。
    • 参数 thousand 设置千位分隔符。
  • 格式:

NumberFormat(number float64, decimals int, decPoint, thousandsSep string) string
  • 示例:
func ExampleNumberFormat() {
      var (
          number       float64 = 123456
          decimals             = 2
          decPoint             = "."
          thousandsSep         = ","
          result               = gstr.NumberFormat(number, decimals, decPoint, thousandsSep)
      )
      fmt.Println(result)

      // Output:
      // 123,456.00
}

Shuffle

  • 说明:Shuffle 返回将 str 随机打散后的字符串。

  • 格式:

Shuffle(str string) string
  • 示例:
func ExampleShuffle() {
      var (
          str    = `123456`
          result = gstr.Shuffle(str)
      )
      fmt.Println(result)

      // May Output:
      // 563214
}

HideStr

  • 说明: HideStr 将字符串 str 从中间字符开始,百分比 percent 的字符转换成 hide 字符串。

  • 格式:

HideStr(str string, percent int, hide string) string
  • 示例:
func ExampleHideStr() {
      var (
          str     = `13800138000`
          percent = 40
          hide    = `*`
          result  = gstr.HideStr(str, percent, hide)
      )
      fmt.Println(result)

      // Output:
      // 138****8000
}

Nl2Br

  • 说明:Nl2Br 在字符串中的所有换行符之前插入 HTML 换行符 (' br ' |<br />): \n\r, \r\n, \r, \n。

  • 格式:

Nl2Br(str string, isXhtml ...bool) string
  • 示例:
func ExampleNl2Br() {
      var (
          str = `goframe
is
very
easy
to
use`
          result = gstr.Nl2Br(str)
      )

      fmt.Println(result)

      // Output:
      // goframe<br>is<br>very<br>easy<br>to<br>use
}

WordWrap

  • 说明: WordWrap 使用换行符将 str 换行到给定字符数(不会切分单词)。

  • 格式:

WordWrap(str string, width int, br string) string
  • 示例:
func ExampleWordWrap() {
      {
          var (
              str    = `A very long woooooooooooooooooord. and something`
              width  = 8
              br     = "\n"
              result = gstr.WordWrap(str, width, br)
          )
          fmt.Println(result)
      }
      {
          var (
              str    = `The quick brown fox jumped over the lazy dog.`
              width  = 20
              br     = "<br />\n"
              result = gstr.WordWrap(str, width, br)
          )
          fmt.Printf("%v", result)
      }

      // Output:
      // A very
      // long
      // woooooooooooooooooord.
      // and
      // something
      // The quick brown fox<br />
      // jumped over the lazy<br />
      // dog.
}

域名处理

IsSubDomain

  • 说明:IsSubDomain 校验 subDomain 是否为 mainDomain 的子域名。 支持 mainDomain 中的 '*'。

  • 格式:

IsSubDomain(subDomain string, mainDomain string) bool
  • 示例:
func ExampleIsSubDomain() {
      var (
          subDomain  = `s.goframe.org`
          mainDomain = `goframe.org`
          result     = gstr.IsSubDomain(subDomain, mainDomain)
      )
      fmt.Println(result)

      // Output:
      // true
}

参数解析

Parse

  • 说明: Parse 解析字符串并以 map[string]interface{} 类型返回。

  • 格式:

Parse(s string) (result map[string]interface{}, err error)
  • 示例:
func ExampleParse() {
      {
          var (
              str       = `v1=m&v2=n`
              result, _ = gstr.Parse(str)
          )
          fmt.Println(result)
      }
      {
          var (
              str       = `v[a][a]=m&v[a][b]=n`
              result, _ = gstr.Parse(str)
          )
          fmt.Println(result)
      }
      {
          // The form of nested Slice is not yet supported.
          var str = `v[][]=m&v[][]=n`
          result, err := gstr.Parse(str)
          if err != nil {
              panic(err)
          }
          fmt.Println(result)
      }
      {
          // This will produce an error.
          var str = `v=m&v[a]=n`
          result, err := gstr.Parse(str)
          if err != nil {
              println(err)
          }
          fmt.Println(result)
      }
      {
          var (
              str       = `a .[[b=c`
              result, _ = gstr.Parse(str)
          )
          fmt.Println(result)
      }

      // May Output:
      // map[v1:m v2:n]
      // map[v:map[a:map[a:m b:n]]]
      // map[v:map[]]
      // Error: expected type 'map[string]interface{}' for key 'v', but got 'string'
      // map[]
      // map[a___[b:c]
}

位置查找

Pos

  • 说明:Pos 返回 needle 在 haystack 中第一次出现的位置,区分大小写。 如果没有找到,则返回-1。

  • 格式:

Pos(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePos() {
      var (
          haystack = `Hello World`
          needle   = `World`
          result   = gstr.Pos(haystack, needle)
      )
      fmt.Println(result)

      // Output:
      // 6
}

PosRune

  • 说明: PosRune 的作用于函数 Pos 相似,但支持 haystack 和 needle 为 unicode 字符串。

  • 格式:

PosRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRune() {
      var (
          haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
          needle   = `Go`
          posI     = gstr.PosRune(haystack, needle)
          posR     = gstr.PosRRune(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 0
      // 22
}

PosI

  • 说明:PosI 返回 needle 在 haystack 中第一次出现的位置,不区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosI(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosI() {
      var (
          haystack = `goframe is very, very easy to use`
          needle   = `very`
          posI     = gstr.PosI(haystack, needle)
          posR     = gstr.PosR(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 11
      // 17
}

PosRuneI

  • 说明: PosRuneI 的作用于函数 PosI 相似,但支持 haystack 和 needle 为 unicode 字符串。

  • 格式:

PosIRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosIRune() {
      {
          var (
              haystack    = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
              needle      = `高性能`
              startOffset = 10
              result      = gstr.PosIRune(haystack, needle, startOffset)
          )
          fmt.Println(result)
      }
      {
          var (
              haystack    = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
              needle      = `高性能`
              startOffset = 30
              result      = gstr.PosIRune(haystack, needle, startOffset)
          )
          fmt.Println(result)
      }

      // Output:
      // 14
      // -1
}

PosR

  • 说明:PosR 返回 needle 在 haystack 中最后一次出现的位置,区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosR(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosR() {
      var (
          haystack = `goframe is very, very easy to use`
          needle   = `very`
          posI     = gstr.PosI(haystack, needle)
          posR     = gstr.PosR(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 11
      // 17
}

PosRuneR

  • 说明: PosRuneR 的作用于函数 PosR 相似,但支持 haystack 和 needle 为 unicode 字符串。

  • 格式:

PosRRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRRune() {
      var (
          haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
          needle   = `Go`
          posI     = gstr.PosIRune(haystack, needle)
          posR     = gstr.PosRRune(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 0
      // 22
}

PosRI

  • 说明:PosRI 返回 needle 在 haystack 中最后一次出现的位置,不区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosRI(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRI() {
      var (
          haystack = `goframe is very, very easy to use`
          needle   = `VERY`
          posI     = gstr.PosI(haystack, needle)
          posR     = gstr.PosRI(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 11
      // 17
}

PosRIRune

  • 说明:PosRIRune的作用于函数PosRI相似,但支持 haystack 和 needle 为 unicode 字符串。

  • 格式:

PosRIRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRIRune() {
      var (
          haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
          needle   = `GO`
          posI     = gstr.PosIRune(haystack, needle)
          posR     = gstr.PosRIRune(haystack, needle)
      )
      fmt.Println(posI)
      fmt.Println(posR)

      // Output:
      // 0
      // 22
}

查找替换

Replace

  • 说明: Replace 返回 origin 字符串中, search 被 replace 替换后的新字符串。 search 区分大小写。

  • 格式:

Replace(origin, search, replace string, count ...int) string
  • 示例:
func ExampleReplace() {
      var (
          origin  = `golang is very nice!`
          search  = `golang`
          replace = `goframe`
          result  = gstr.Replace(origin, search, replace)
      )
      fmt.Println(result)

      // Output:
      // goframe is very nice!
}

ReplaceI

  • 说明: ReplaceI 返回 origin 字符串中, search 被 replace 替换后的新字符串。 search 不区分大小写。

  • 格式:

ReplaceI(origin, search, replace string, count ...int) string
  • 示例:
func ExampleReplaceI() {
      var (
          origin  = `golang is very nice!`
          search  = `GOLANG`
          replace = `goframe`
          result  = gstr.ReplaceI(origin, search, replace)
      )
      fmt.Println(result)

      // Output:
      // goframe is very nice!
}

ReplaceByArray

  • 说明:ReplaceByArray 返回 origin 被一个切片按两个一组 (search, replace) 顺序替换的新字符串,区分大小写。

  • 格式:

ReplaceByArray(origin string, array []string) string
  • 示例:
func ExampleReplaceByArray() {
      {
          var (
              origin = `golang is very nice`
              array  = []string{"lang", "frame"}
              result = gstr.ReplaceByArray(origin, array)
          )
          fmt.Println(result)
      }
      {
          var (
              origin = `golang is very good`
              array  = []string{"golang", "goframe", "good", "nice"}
              result = gstr.ReplaceByArray(origin, array)
          )
          fmt.Println(result)
      }

      // Output:
      // goframe is very nice
      // goframe is very nice
}

ReplaceIByArray

  • 说明:ReplaceIByArray 返回 origin 被一个切片按两个一组 (search, replace) 顺序替换的新字符串,不区分大小写。

  • 格式:

ReplaceIByArray(origin string, array []string) string
  • 示例:
func ExampleReplaceIByArray() {
      var (
          origin = `golang is very Good`
          array  = []string{"Golang", "goframe", "GOOD", "nice"}
          result = gstr.ReplaceIByArray(origin, array)
      )

      fmt.Println(result)

      // Output:
      // goframe is very nice
}

ReplaceByMap

  • 说明:ReplaceByMap 返回 origin 中 map 的 key 替换为 value 的新字符串,区分大小写。

  • 格式:

ReplaceByMap(origin string, replaces map[string]string) string
  • 示例:
func ExampleReplaceByMap() {
      {
          var (
              origin   = `golang is very nice`
              replaces = map[string]string{
                  "lang": "frame",
              }
              result = gstr.ReplaceByMap(origin, replaces)
          )
          fmt.Println(result)
      }
      {
          var (
              origin   = `golang is very good`
              replaces = map[string]string{
                  "golang": "goframe",
                  "good":   "nice",
              }
              result = gstr.ReplaceByMap(origin, replaces)
          )
          fmt.Println(result)
      }

      // Output:
      // goframe is very nice
      // goframe is very nice
}

ReplaceIByMap

  • 说明:ReplaceIByMap 返回 origin 中 map 的 key 替换为 value 的新字符串,不区分大小写。

  • 格式:

ReplaceIByMap(origin string, replaces map[string]string) string
  • 示例:
func ExampleReplaceIByMap() {
      var (
          origin   = `golang is very nice`
          replaces = map[string]string{
              "Lang": "frame",
          }
          result = gstr.ReplaceIByMap(origin, replaces)
      )
      fmt.Println(result)

      // Output:
      // goframe is very nice
}

子串截取

Str

  • 说明: Str 返回从 needle 第一次出现的位置开始,到 haystack 结尾的字符串(包含 needle 本身)。

  • 格式:

Str(haystack string, needle string) string
  • 示例:
func ExampleStr() {
      var (
          haystack = `xxx.jpg`
          needle   = `.`
          result   = gstr.Str(haystack, needle)
      )
      fmt.Println(result)

      // Output:
      // .jpg
}

StrEx

  • 说明: StrEx 返回从 needle 第一次出现的位置开始,到 haystack 结尾的字符串(不包含 needle 本身)。

  • 格式:

StrEx(haystack string, needle string) string
  • 示例:
func ExampleStrEx() {
      var (
          haystack = `https://goframe.org/index.html?a=1&b=2`
          needle   = `?`
          result   = gstr.StrEx(haystack, needle)
      )
      fmt.Println(result)

      // Output:
      // a=1&b=2
}

StrTill

  • 说明: StrTill 返回从 haystack 字符串开始到 needle 第一次出现的位置的字符串(包含 needle 本身)。

  • 格式:

StrTill(haystack string, needle string) string
  • 示例:
func ExampleStrTill() {
      var (
          haystack = `https://goframe.org/index.html?test=123456`
          needle   = `?`
          result   = gstr.StrTill(haystack, needle)
      )
      fmt.Println(result)

      // Output:
      // https://goframe.org/index.html?
}

StrTillEx

  • 说明: StrTillEx 返回从 haystack 字符串开始到 needle 第一次出现的位置的字符串(不包含 needle 本身)。

  • 格式:

StrTillEx(haystack string, needle string) string
  • 示例:
func ExampleStrTillEx() {
      var (
          haystack = `https://goframe.org/index.html?test=123456`
          needle   = `?`
          result   = gstr.StrTillEx(haystack, needle)
      )
      fmt.Println(result)

      // Output:
      // https://goframe.org/index.html
}

SubStr

  • 说明:SubStr 返回字符串 str 从 start 开始,长度为 length 的新字符串。 参数 length 是可选的,它默认使用 str 的长度。

  • 格式:

SubStr(str string, start int, length ...int) (substr string)
  • 示例:
func ExampleSubStr() {
      var (
          str    = `1234567890`
          start  = 0
          length = 4
          subStr = gstr.SubStr(str, start, length)
      )
      fmt.Println(subStr)

      // Output:
      // 1234
}

SubStrRune

  • 说明:SubStrRune 返回 unicode 字符串 str 从 start 开始,长度为 length 的新字符串。 参数 length 是可选的,它默认使用 str 的长度。

  • 格式:

SubStrRune(str string, start int, length ...int) (substr string)
  • 示例:
func ExampleSubStrRune() {
      var (
          str    = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架。`
          start  = 14
          length = 3
          subStr = gstr.SubStrRune(str, start, length)
      )
      fmt.Println(subStr)

      // Output:
      // 高性能
}

StrLimit

  • 说明: StrLimit 取 str 字符串开始,长度为 length 的字符串,加上 suffix... 后返回新的字符串。

  • 格式:

StrLimit(str string, length int, suffix ...string) string
  • 示例:
func ExampleStrLimit() {
      var (
          str    = `123456789`
          length = 3
          suffix = `...`
          result = gstr.StrLimit(str, length, suffix)
      )
      fmt.Println(result)

      // Output:
      // 123...
}

StrLimitRune

  • 说明: StrLimitRune 取 unicode 字符串 str 开始,长度为 length 的字符串,加上 suffix... 后返回新的字符串。

  • 格式:

StrLimitRune(str string, length int, suffix ...string) string
  • 示例:
func ExampleStrLimitRune() {
      var (
          str    = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架。`
          length = 17
          suffix = "..."
          result = gstr.StrLimitRune(str, length, suffix)
      )
      fmt.Println(result)

      // Output:
      // GoFrame是一款模块化、高性能...
}

SubStrFrom

  • 说明:SubStrFrom 返回字符串 str 从第一次出现 need 到 str 的结尾的字符串(包含 need)。

  • 格式:

SubStrFrom(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFrom() {
      var (
          str  = "我爱GoFrameGood"
          need = `爱`
      )

      fmt.Println(gstr.SubStrFrom(str, need))

      // Output:
      // 爱GoFrameGood
}

SubStrFromEx

  • 说明:SubStrFromEx 返回字符串 str 从第一次出现 need 到 str 的结尾的字符串(不包含 need)。

  • 格式:

SubStrFromEx(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromEx() {
      var (
          str  = "我爱GoFrameGood"
          need = `爱`
      )

      fmt.Println(gstr.SubStrFromEx(str, need))

      // Output:
      // GoFrameGood
}

SubStrFromR

  • 说明:SubStrFromR 返回字符串 str 从最后一次出现 need 到 str 的结尾的字符串(包含 need)。

  • 格式:

SubStrFromR(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromR() {
      var (
          str  = "我爱GoFrameGood"
          need = `Go`
      )

      fmt.Println(gstr.SubStrFromR(str, need))

      // Output:
      // Good
}

SubStrFromREx

  • 说明:SubStrFromREx 返回字符串 str 从最后一次出现 need 到 str 的结尾的字符串(不包含 need)。

  • 格式:

SubStrFromREx(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromREx() {
      var (
          str  = "我爱GoFrameGood"
          need = `Go`
      )

      fmt.Println(gstr.SubStrFromREx(str, need))

      // Output:
      // od
}

字符/子串过滤

Trim

  • 说明: Trim 从字符串的开头和结尾剪切空白(或其他字符)。 可选参数 characterMask 指定额外剥离的字符。

  • 格式:

Trim(str string, characterMask ...string) string
  • 示例:
func ExampleTrim() {
      var (
          str           = `*Hello World*`
          characterMask = "*d"
          result        = gstr.Trim(str, characterMask)
      )
      fmt.Println(result)

      // Output:
      // Hello Worl
}

TrimStr

  • 说明:TrimStr 从字符串的开头和结尾去掉所有 cut 字符串(不会删除开头或结尾的空白)。

  • 格式:

TrimStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimStr() {
      var (
          str    = `Hello World`
          cut    = "World"
          count  = -1
          result = gstr.TrimStr(str, cut, count)
      )
      fmt.Println(result)

      // Output:
      // Hello
}

TrimLeft

  • 说明:TrimLeft 将字符串开头的空格(或其他字符)删除。

  • 格式:

TrimLeft(str string, characterMask ...string) string
  • 示例:
func ExampleTrimLeft() {
      var (
          str           = `*Hello World*`
          characterMask = "*"
          result        = gstr.TrimLeft(str, characterMask)
      )
      fmt.Println(result)

      // Output:
      // Hello World*
}

TrimLeftStr

  • 说明:TrimLeftStr 从字符串的开头删除 count 个 cut 字符串(不会删除开头的空格)。

  • 格式:

TrimLeftStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimLeftStr() {
      var (
          str    = `**Hello World**`
          cut    = "*"
          count  = 1
          result = gstr.TrimLeftStr(str, cut, count)
      )
      fmt.Println(result)

      // Output:
      // *Hello World**
}

TrimRight

  • 说明: TrimRight 从字符串的末尾去掉空白(或其他字符)。

  • 格式:

TrimRight(str string, characterMask ...string) string
  • 示例:
func ExampleTrimRight() {
      var (
          str           = `**Hello World**`
          characterMask = "*def" // []byte{"*", "d", "e", "f"}
          result        = gstr.TrimRight(str, characterMask)
      )
      fmt.Println(result)

      // Output:
      // **Hello Worl
}

TrimRightStr

  • 说明:TrimRightStr 从字符串的尾部删除 count 个 cut 字符串(不会删除尾部的空格)。

  • 格式:

TrimRightStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimRightStr() {
      var (
          str    = `Hello World!`
          cut    = "!"
          count  = -1
          result = gstr.TrimRightStr(str, cut, count)
      )
      fmt.Println(result)

      // Output:
      // Hello World
}

TrimAll

  • 说明: TrimAll 删除字符串 str 中的所有空格(或其他字符)以及 characterMask 字符。

  • 格式:

TrimAll(str string, characterMask ...string) string
  • 示例:
func ExampleTrimAll() {
      var (
          str           = `*Hello World*`
          characterMask = "*"
          result        = gstr.TrimAll(str, characterMask)
      )
      fmt.Println(result)

      // Output:
      // HelloWorld
}

HasPrefix

  • 说明: HasPrefix 返回 s 是否以 prefix 开头。

  • 格式:

HasPrefix(s, prefix string) bool
  • 示例:
func ExampleHasPrefix() {
      var (
          s      = `Hello World`
          prefix = "Hello"
          result = gstr.HasPrefix(s, prefix)
      )
      fmt.Println(result)

      // Output:
      // true
}

HasSuffix

  • 说明: HasSuffix 返回 s 是否以 suffix 结束。

  • 格式:

HasSuffix(s, suffix string) bool
  • 示例:
func ExampleHasSuffix() {
      var (
          s      = `my best love is goframe`
          prefix = "goframe"
          result = gstr.HasSuffix(s, prefix)
      )
      fmt.Println(result)

      // Output:
      // true
}

版本比较

CompareVersion

  • 说明:CompareVersion 将 a 和 b 作为标准 GNU 版本进行比较。

  • 格式:

CompareVersion(a, b string) int
  • 示例:
func ExampleCompareVersion() {
      fmt.Println(gstr.CompareVersion("v2.11.9", "v2.10.8"))
      fmt.Println(gstr.CompareVersion("1.10.8", "1.19.7"))
      fmt.Println(gstr.CompareVersion("2.8.beta", "2.8"))

      // Output:
      // 1
      // -1
      // 0
}

CompareVersionGo

  • 说明: CompareVersionGo 将 a 和 b 作为标准的 Golang 版本进行比较。

  • 格式:

CompareVersionGo(a, b string) int
  • 示例:
func ExampleCompareVersionGo() {
      fmt.Println(gstr.CompareVersionGo("v2.11.9", "v2.10.8"))
      fmt.Println(gstr.CompareVersionGo("v4.20.1", "v4.20.1+incompatible"))
      fmt.Println(gstr.CompareVersionGo(
          "v0.0.2-20180626092158-b2ccc119800e",
          "v1.0.1-20190626092158-b2ccc519800e",
      ))

      // Output:
      // 1
      // 1
      // -1
}

相似计算

Levenshtein

  • 说明: Levenshtein 计算两个字符串之间的 Levenshtein 距离。

  • 格式:

Levenshtein(str1, str2 string, costIns, costRep, costDel int) int
  • 示例:
func ExampleLevenshtein() {
      var (
          str1    = "Hello World"
          str2    = "hallo World"
          costIns = 1
          costRep = 1
          costDel = 1
          result  = gstr.Levenshtein(str1, str2, costIns, costRep, costDel)
      )
      fmt.Println(result)

      // Output:
      // 2
}

SimilarText

  • 说明: SimilarText 计算两个字符串之间的相似度。

  • 格式:

SimilarText(first, second string, percent *float64) int
  • 示例:
func ExampleSimilarText() {
      var (
          first   = `AaBbCcDd`
          second  = `ad`
          percent = 0.80
          result  = gstr.SimilarText(first, second, &percent)
      )
      fmt.Println(result)

      // Output:
      // 2
}

Soundex

  • 说明: Soundex 用于计算字符串的 Soundex 键。

  • 格式:

Soundex(str string) string
  • 示例:
func ExampleSoundex() {
      var (
          str1    = `Hello`
          str2    = `Hallo`
          result1 = gstr.Soundex(str1)
          result2 = gstr.Soundex(str2)
      )
      fmt.Println(result1, result2)

      // Output:
      // H400 H400
}

Source: SKILL.md on GitHub

1 alert16d5 checks · Risk MEDIUM
  • Gen Agent Trust Hub16d

    The skill provides a comprehensive development guide and code examples for the GoFrame v2 framework. While highly informative for Go developers, it contains several examples with hardcoded placeholder secrets, tokens, and specific local file paths to sensitive configuration files (like Kubernetes credentials). These elements are provided for demonstration purposes but represent insecure practices if used in production without modification.

  • Socket16d

    5 alerts: gptSecurity, gptAnomaly

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    227/949 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 911705d. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 4 months ago.

Steadyupdated 4 months ago
  • Go
  • Database
  • goframe
  • orm
  • http
  • grpc
  • microservices
  • crud
  • scaffolding
  • middleware

README badge

README badge for gogf/skills

Provides instruction and conventions for developing with GoFrame v2, a modular Go framework for building HTTP and gRPC services, microservices, and database operations using its ORM, CLI tooling, and project scaffolding. Use this skill when the target project has GoFrame v2 as a dependency or when the user requests scaffolding, migrations, or service development with GoFrame conventions.

Generated from the current SKILL.md.

When should I use this skill?
Use this skill only when your Go project uses GoFrame v2, indicated by github.com/gogf/gf/v2 in go.mod or imports. Do not use for generic Go projects, frontend work, or infrastructure tasks unrelated to GoFrame.
Should I manually set created_at and updated_at fields?
No. GoFrame automatically writes created_at on insert and updated_at on insert/update/save. Manually setting these fields is redundant and violates project conventions.
What should I use for database operations instead of g.Map?
Always use DO objects from internal/model/do/. DO struct fields are interface{}, unset fields remain nil and are automatically ignored by the ORM.
How does soft delete work in GoFrame?
Call Delete() on the DAO; GoFrame automatically converts it to UPDATE SET deleted_at = NOW(). Queries automatically filter out soft-deleted rows without requiring manual WhereNull conditions.
Where should I implement business logic?
Implement business logic directly in the service/ directory. Do not use the logic/ directory unless explicitly requested.

Generated from the current SKILL.md. These answers refresh after source changes.