Golang中文字符串截取函数实现原理

 更新时间:2018年03月13日 17:08:44   投稿:wdc  
在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现问题,下面我们来自定义个函数解决Golang中文字符串截取问题

在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。

例如:

想要截取前四个字

name := "我是胡八一"
fmt.Println("name[:4] = ",name[:4])

执行后得到的结果会是这样的:

name[:4] = 我?

解决方法:
先将其转为[]rune,再截取后,转会string

nameRune := []rune(name)
fmt.Println("string(nameRune[:4]) = ",string(nameRune[:4]))

运行结果:

string(nameRune[:4]) =  我是胡八

好了弄懂了原理我们来写一个完整的Golang中文字符串截取函数

func SubString(str string, begin, length int) string {
  fmt.Println("Substring =", str)
  rs := []rune(str)
  lth := len(rs)
  fmt.Printf("begin=%d, end=%d, lth=%d\n", begin, length, lth)
  if begin < 0 {
    begin = 0
  }
  if begin >= lth {
    begin = lth
  }
  end := begin + length

  if end > lth {
    end = lth
  }
  fmt.Printf("begin=%d, end=%d, lth=%d\n", begin, length, lth)
  return string(rs[begin:end])
}

实现Golang中文字符串截取函数很简单利用golang原理语句就可实现

相关文章

  • Go语言定时任务的实现示例

    Go语言定时任务的实现示例

    本文主要介绍了Go语言定时任务的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 详解Go中gin框架如何实现带颜色日志

    详解Go中gin框架如何实现带颜色日志

    当我们在终端上(比如Goland)运行gin框架搭建的服务时,会发现输出的日志是可以带颜色的,那这是如何实现的呢?本文就来和大家简单讲讲
    2023-04-04
  • Go语言实现有规律的数字版本号的排序工具

    Go语言实现有规律的数字版本号的排序工具

    这篇文章主要为大家详细介绍了如何利用Go语言实现有规律的数字版本号的排序工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-01-01
  • 解析Go语言编程中的struct结构

    解析Go语言编程中的struct结构

    这篇文章主要介绍了Go语言编程中的struct结构,是Go语言入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 一文详解Golang中net/http包的实现原理

    一文详解Golang中net/http包的实现原理

    这篇文章主要介绍了如何用 net/http 自己编写实现一个 HTTP Server 并探究其实现原理,具体讲解Go语言是如何接收和处理请求的,希望能够对大家的学习或工作具有一定的帮助
    2022-08-08
  • go实现反转链表

    go实现反转链表

    这篇文章主要介绍了go实现反转链表的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解Go语言的内存模型及堆的分配管理

    详解Go语言的内存模型及堆的分配管理

    这篇笔记主要介绍Go内存分配和Go内存管理,会轻微涉及内存申请和释放,以及Go垃圾回收,文中有详细的代码示例以及图片介绍,需要的朋友可以参考下
    2023-05-05
  • 利用golang实现封装trycatch异常处理实例代码

    利用golang实现封装trycatch异常处理实例代码

    Go语言追求简洁优雅,所以go语言不支持传统的 try…catch…finally 这种异常,最近发现了不错的trycatch包,下面这篇文章主要跟大家分享了关于利用golang实现封装trycatch异常处理的实例代码,需要的朋友可以参考下。
    2017-07-07
  • Go语言结合grpc和protobuf实现去中心化的聊天室

    Go语言结合grpc和protobuf实现去中心化的聊天室

    这篇文章主要为大家详细介绍了Go语言如何结合grpc和protobuf实现去中心化的聊天室,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 解决goxorm无法更新值为默认值的问题

    解决goxorm无法更新值为默认值的问题

    这篇文章主要介绍了解决goxorm无法更新值为默认值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论