Workspace
  • Introduction
  • Algorithm
    • 二叉树
    • 排序算法
  • Basic Knowledge
    • CAP定理
    • CAS-SSO-单点登陆
    • 单向认证-双向认证
  • CICD
  • Cloud Native
  • Docker
    • Docker特性
    • Docker资源隔离
  • Golang
    • Standard Library
      • Archive
        • Builtin
        • Zip
    • Golang-container包
    • Golang-fallthrough关键字
    • Golang For Slect
    • Golang-Goroutine泄露
    • Golang Interface
    • Golang-json.Unmarshal
    • Golang Label
    • Golang Map String Struct
    • Golang Map To Struct
    • Golang Override Package Function
    • Golang-Slice删除元素
    • Golang Switch
    • Golang-sync.Cond
    • Golang-sync.Map
    • Golang-sync.once
    • Golang-type关键字
    • Golang-代码生成
    • golang-并发数控制
    • Golang-并发退出
    • Golang-插件系统
    • Golang-继承
    • Golang之channel
    • Golang之continue
    • Golang之make与new和nil
    • Golang之map
    • Golang之reflect
    • Golang之类型判断
    • Golang代码质量检测
    • Golang变量避坑
    • Golang字符串遍历
    • golang并发控制代码示例
    • Golang性能优化
    • Golang死锁
    • goroutine-协程-线程-进程
    • go值传递
    • go内存逃逸分析
    • go并发MGP模式
    • go并发控制
    • 垃圾回收-三色法
  • Istio
    • 服务网格
  • Jenkins
    • Jenkin On K 8 S
    • Jenkins Mac
  • Kubernetes
    • Deployment
    • k8s容器内查看-cpu-memory分配情况
    • kube-proxy原理
    • Kubernetes Informers
    • Kubernetes扩展点
    • Kubernetes部署策略
    • Pod Non Root
    • Pod驱逐
    • PV PVC Storage Class
    • Security Context
    • 优雅热更新
  • Python
    • Python-vs-Golang协程区别
  • Serviceless
  • Shell
    • Shell小技巧
  • VPN
    • OC Serv
  • Redis
Powered by GitBook
On this page
  • 什么是字符串
  • UTF-8 和字符串
  • go有两种方式对字符串进行遍历
  • 参考

Was this helpful?

  1. Golang

Golang字符串遍历

什么是字符串

在 Go 语言中,字符串实际上是类型为 byte 的只读切片。

一个字符包含了任意个 byte。它并不限定 Unicode,UTF-8或者任何其它预定义的编码。在内容上,它完全等价于一个类型为 byte 的切片。

字符串是 Golang 语言中最常用的基础数据类型之一,虽然字符串被看作是一个整体,但是实际上字符串是一片连续的内存空间,我们也可以理解成一个由字符组成的数组。

C 语言中的字符串就使用字符串就使用字符数组 char[] 表示,作为数组会占用一片连续的内存连续空间,这片内存空间存储了的字节共同组成了字符串,Go语言中的字符串其实是一个只读的数组。

UTF-8 和字符串

索引字符字符串返回的是 byte,而不是字符:一个字符就是一堆字节。这意味着当我们将字符存储在字符串中时,实际存储的是这个字符的字节。

  • Go源码总是UTF-8

  • 一个字符串包含任意个byte

  • 字符串常量如果缺少字节级转义,将始终保持UTF-8序列。

  • Unicode的代码点在Go语言中被称为rune

  • Go不保证字符串中的字符是规范化的。

go有两种方式对字符串进行遍历

go 语言中的字条串实际上是类型为 byte 的只读切片。或者说一个字符串是一堆字节。

  • utf-8 uint8 byte

  • Unicode int32 rune

package main

import (
    "fmt"
    "reflect"
)

func main() {
    str := "Hello,世界"
    //utf-8遍历
    for i := 0; i < len(str); i++ {
        ch := str[i]
        ctype:=reflect.TypeOf(ch)
        fmt.Printf("%s ",ctype)                   //uint8
    }
    fmt.Println("=============>Unicode遍历")
    //Unicode遍历
    for _, ch1 := range str {
        ctype:=reflect.TypeOf(ch1)
        fmt.Printf("%s ",ctype)                    //int32
    }
}
修改字符串中的字节(用 []byte):

func main() {

     s := "Hello 世界!"

     b := []byte(s)        // 转换为 []byte,自动复制数据

     b[5] = ','            // 修改 []byte

     fmt.Printf("%s\n", s) // s 不能被修改,内容保持不变

     fmt.Printf("%s\n", b) // 修改后的数据

}

修改字符串中的字符(用 []rune):

func main() {

     s := "Hello 世界!"

     r := []rune(s)         // 转换为 []rune,自动复制数据

     r[6] = '中'            // 修改 []rune

     r[7] = '国'            // 修改 []rune

     fmt.Println(s)         // s 不能被修改,内容保持不变

     fmt.Println(string(r)) // 转换为字符串,又一次复制数据

}

参考

PreviousGolang变量避坑Nextgolang并发控制代码示例

Last updated 5 years ago

Was this helpful?

go 中的字符串遍历
go字符串的遍历输出
3.4 字符串