golang byte和rune的区别 或者是string知识

2024-05-14 02:58

本文主要是介绍golang byte和rune的区别 或者是string知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

golang byte和rune的区别

原创  2018年01月19日 15:46:16
  • 549

       我们知道golang中的string类型存储的字符串是不可变的, 如果要修改string内容需要将string转换为[]byte或[]rune,并且修改后的string内容是重新分配的。

       那么byte和rune的区别是什么呢?其实很简单,直接看golang源码既可:


    一个是uint8、一个是uint32。就这么简单~。

    所以二者的却别也不言而喻了,一个里面只能填充uint8的值、另一个可以填充uint32的值。


Golang string 笔记


Golang 中的字符串,有两种表示方法:

s1 := "hello, world"
s2 := `hello, world.
send using Golang`

Golang 中没有字符类型(就是 C 中的 char),字符串都是 rune 类型。Golang 中字符串以 UTF-8 编码后存储,存储的是字节。

UTF-8 实际是上一种变长编码,一个字符(一个中文字或其他语言的文字)可能以 1 个、2 个或 3 个字节来存储。作为对比,一个 ASCII 字符只需要一个字节,当然 ASCII 可以表示的字符就比较有限了。

在 Golang 中,字符串的内容一但被创建,是不能被修改的。如果需要修改字符串,可以将字符串转换为 []byte 或者 []rune。需要特别指出的一点是在使用 for ... range 遍历字符串中的字符时,Golang 会自动将 string 转换为 []rune,然后再遍历字符串。例如:

 s := "hello 世界"
for i, v := range s {fmt.Printf("%v = %c\n", i, v)
}

输出:

0 = h
1 = e
2 = l
3 = l
4 = o
5 =  
6 = 世
9 = 界

len(s) 返回的是字符串 s 的字节数。


这篇关于golang byte和rune的区别 或者是string知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987565

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被