最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Go语言对字符串相关的操作提供了大量的API?

    大家好,我叫polarisxu。

    在编程中,字符串是最常用的。 Go 语言还为字符串相关的操作提供了大量的 API。一方面,字符串可以像普通切片一样进行相关操作;另一方面,标准库为字符串操作提供了一个包strings。

    01 strings.Index系列函数

    假设有这样一个需求:从192.168.1.1:8080获取ip和端口。

    我们通常这样做:

    addr := "192.168.1.1:8080"
    pos := strings.Index(addr, ":")
    if pos == -1 {
      panic("非法地址")
    }
    ip, port := addr[:pos], addr[pos+1:]
    

    在实际项目中,pos == -1时应该会报错

    这里忽略net.TCPAddr得到的方法,主要讲解字符串处理。

    在strings包中,有几个Index相关的函数:

    func Index(s, substr string) int
    func IndexAny(s, chars string) int
    func IndexByte(s string, c byte) int
    func IndexFunc(s string, f func(rune) bool) int
    func IndexRune(s string, r rune) int
    func LastIndex(s, substr string) int
    func LastIndexAny(s, chars string) int
    func LastIndexByte(s string, c byte) int
    func LastIndexFunc(s string, f func(rune) bool) int
    

    Go官方统计了Go源码中使用相关函数的代码:

    相关需求如此之多,Index显然不是处理类似需求的最佳方式。于是 Russ Cox 提出在 strings 包中添加一个函数 Cut 来处理类似的常见问题。

    02 增加剪切功能

    Cut函数的签名如下:

    func Cut(s, sep string) (before, after string, found bool)
    

    字符串s在第一个sep被切割成两部分,分别存放在before和after中。如果 s 中没有 sep,则返回 s,””,false。

    什么是车辆识别代码_查询车辆识别代码_声音识别算法源代码

    根据 Russ Cox 的说法,Go 源代码中的 221 个位置使用 Cut 会更好。

    针对上述需求,请改用剪切功能:

    addr := "192.168.1.1:8080"
    ip, port, ok := strings.Cut(addr, ":")
    

    清楚吗? !

    这是提高生活质量的又一优化。

    对于这个功能声音识别算法源代码,官方给出了如下示例:

    package main
    import (
     "fmt"
     "strings"
    )
    func main() {
     show := func(s, sep string) {
      before, after, found := strings.Cut(s, sep)
      fmt.Printf("Cut(%q, %q) = %q, %q, %vn", s, sep, before, after, found)
     }
     show("Gopher", "Go")
     show("Gopher", "ph")
     show("Gopher", "er")
     show("Gopher", "Badger")
    }
    // Output:
    /*
    Cut("Gopher", "Go") = "", "pher", true
    Cut("Gopher", "ph") = "Go", "er", true
    Cut("Gopher", "er") = "Goph", "", true
    Cut("Gopher", "Badger") = "Gopher", "", false
    */
    

    03 总结

    从 PHP 切换到 Go 的朋友一定觉得 Go 标准库应该提供更方便的功能来提高生活质量。在围棋社区这么多年,我确实听到了很多这方面的声音。

    但围棋官员不会轻易添加功能。至于Cut功能,官方已经做了详细的调查和说明。详情请参考本期:bytes, strings: add Cut[1]。可以看出bytes也加入了Cut功能。

    有人提到,为什么不添加 LastCut? Russ Cox 的解释是 LastIndex 的调用次数明显少于 Index,所以暂时不提供 LastCut。

    做决定声音识别算法源代码,不要自欺欺人~

    参考文献

    [1]

    字节,字符串:添加剪切:

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » Go语言对字符串相关的操作提供了大量的API?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论