iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang中的字符串类型为什么不能修改
  • 812
分享到

Golang中的字符串类型为什么不能修改

2023-07-05 09:07:21 812人浏览 薄情痞子
摘要

今天小编给大家分享一下golang中的字符串类型为什么不能修改的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。字符串定义字符串

今天小编给大家分享一下golang中的字符串类型为什么不能修改的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

字符串定义

字符串是一种用来表示字符的数据类型。在使用时,使用" "将字符内容包含起来。例如下面的形式:

package mainimport "fmt"func main() {    var str string = "Hello World!"}

Go中,字符串通常有三种定义方式:

// 第一种(全量定义)var 变量名称 string = "字符串内容"// 类型推导var 变量名称 = "字符串内容"// 短标记(只适用于局部变量)变量名称 := "字符串内容"

字符串的定义,其实也可以通过字节的方式。这里罗列的方式是最为常见的方式。

字符串的组成

Go中的字符串符合Unicode[1]标准,并且采用UTF-8[2]编码。字符串底层其实也是由byte组成(后面会仔细讲解)。通过下面的示例,打印查看具体的字节内容:

s := "Hello World!"for _, v := range s {    fmt.Print(v)    fmt.Print("\t")}// 72 101 108 108 111 32 87 111 114 108 100 33

上面代码打印的内容,就是每一个字符所表示的字节码。

字符串不能修改

通过上面的大致演示,我们对字符串有一个基本的了解。对于字符串不能修改,可能你很纳闷,日常开发中我们对字符串进行重新赋值也是很正常的,为什么又说Go中的字符串不能进行修改呢?

其实这里要纠正这个说话,对于字符串修改并不等价于重新赋值。开发中常用的方式,其实是一种重新赋值的概念。

str := "Hello World!"// 重新赋值str = "Hello Go!"// 字符串修改str[0] = "I"

通常听到的不能修改,其实就是指的上面代码的第二种方式。并且通过这种方式修改会报错::cannot assign to s[0] (value of type byte)

回归正题,为什么Go中的字符串不能通过下标的方式来进行修改呢? 这是因为Go中的字符串的数据结构体是由一个指针和长度组成的结构体,该指针指向的一个切片才是真正的字符串值。Go中源码有这样一段定义:

type stringStruct struct {    str unsafe.Pointer // 指向一个byte类型的切片指针    len int // 字符串的长度}

Golang中的字符串类型为什么不能修改

正是因为底层是一个[]byte类型的切片,当我们使用下标的方式去修改值,这时候将一个字符内容赋值给byte类型,肯定是不允许的。但是我们可以通过下标的方式去访问对应的byte值。

fmt.Println(s[0]) // output:72

那我们要想通过下标的方式去修改值该怎么办呢?这时候,就需要通过切片的方式来定义,然后在转成字符串。

package mainimport (      "fmt")func main() {       s1 := []byte{72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33}    fmt.Println(string(s1))    // 将"H"修改为l    s1[0] = 108    fmt.Println(string(s1))}// output:Hello World!lello World!

字符串的赋值

上面分析了为什么字符串不能使用下标去赋值,回过来解答一下日常开发中的赋值方式。

package mainimport (      "fmt")func main() {    // 声明一个字符串,并给与初始值    s := "Hello World!"    // 对变量 s 进行重新赋值    s := "Hello Go!"}

那为什么这种场景下又可以给字符串重新赋值呢? 这是因为,在Go的底层其实是新创建了一个[]byte{}类型的切片,将变量s中的指针指向了新的内存空间地址(也就是这里的Hello Go!)。原有的Hello World!内存空间会随着垃圾回收机制被回收掉。

Golang中的字符串类型为什么不能修改

以上就是“Golang中的字符串类型为什么不能修改”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: Golang中的字符串类型为什么不能修改

本文链接: https://www.lsjlt.com/news/350834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang中的字符串类型为什么不能修改
    今天小编给大家分享一下Golang中的字符串类型为什么不能修改的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。字符串定义字符串...
    99+
    2023-07-05
  • Golang字符串类型为什么不能修改
    这篇“Golang字符串类型为什么不能修改”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang字符串类型为什么不能修改...
    99+
    2023-07-04
  • 详解为什么说Golang中的字符串类型不能修改
    目录字符串定义字符串的组成字符串不能修改字符串的赋值为什么这么设计在接触Go这么语言,可能你经常会听到这样一句话。对于字符串不能修改,可能你很纳闷,日常开发中我们对字符串进行修改也是...
    99+
    2023-03-06
    Golang字符串类型不能修改 Golang字符串类型 Golang字符串
  • php 更改整型为字符串类型
    PHP语言中的整型(integer)数据类型通常用于存储整数值。在某些情况下,我们需要将整型变量转换为字符串类型(string)。这种转换可以通过PHP中的一些内置函数来完成,下面我们将探讨在PHP中如何将整型变量更改为字符串类型。一、使用...
    99+
    2023-05-24
  • 也许是 golang 中的 bag(类型字符串和字符串不匹配)
    php小编新一为您介绍golang中的bag类型。在golang中,bag类型指的是一种数据结构,用于存储元素的集合。与其他数据结构不同的是,bag中的元素可以重复出现,并且顺序无关紧...
    99+
    2024-02-09
    lsp
  • golang怎么修改字符串
    golang字符串修改的方法有:1、通过字符串切割和拼接,使用strings包中的Split函数将字符串切割为切片,然后通过拼接切片中的元素来修改字符串;2、使用字节数组进行修改,通过将字符串转换为字节数组进行修改。本教程操作环境:wind...
    99+
    2023-07-14
  • golang怎么将各种类型转为字符串
    golang是一种非常强大的编程语言,它的特点是简洁、快速和安全。golang中提供了各种类型之间的转换方法,其中,将其他类型转换为字符串类型是常见的操作。本文将介绍golang中将各种类型转换为字符串的方法,同时也会介绍一些需要注意的问题...
    99+
    2023-05-14
  • 将字符串转换为字符串值的类型
    php小编百草在这里为大家介绍如何将字符串转换为不同类型的值。在编程中,我们经常需要将字符串转换为其他类型,比如整数、浮点数、布尔值等。PHP提供了一系列内置的函数和方法来实现这个转换...
    99+
    2024-02-11
  • Golang字符串怎么转time类型
    这篇文章主要讲解了“Golang字符串怎么转time类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang字符串怎么转time类型”吧!前言由于数据库的类型为Data 类型,所以插入...
    99+
    2023-07-05
  • C#怎么把不同值的类型转换为字符串类型
    本文小编为大家详细介绍“C#怎么把不同值的类型转换为字符串类型”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么把不同值的类型转换为字符串类型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实例namespa...
    99+
    2023-06-17
  • Golang:将自定义类型(别名为字节)转换为字符串
    小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Golang:将自定义类型(别名为字节)转换为字符串》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多...
    99+
    2024-04-04
  • python中字符串是什么数据类型
    python中字符串是被标识为用引号引起来的一组连续字符,可以使用切片运算符([]和[:])来获取字符串的子集,其中索引的起始位置为字符串的开头0,末尾的索引为-1。python中字符串操作有:创建字符串var1 = 'Hello Worl...
    99+
    2024-04-02
  • 为什么PHP字符串不能中文?如何解决?
    PHP是一种非常流行的编程语言,被广泛应用于网页开发、服务器端编程、数据库编程等方面。它支持多种数据类型,如字符串、整形、浮点型、数组、对象等等,其中字符串类型是编程中经常用到的一种。但是,在使用PHP编写程序时,可能会遇到一种情况,即字符...
    99+
    2023-05-14
    php php字符串
  • PHP怎么将字符串类型的数字转化为真正的数字类型
    这篇文章主要介绍“PHP怎么将字符串类型的数字转化为真正的数字类型”,在日常操作中,相信很多人在PHP怎么将字符串类型的数字转化为真正的数字类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么将字符串...
    99+
    2023-07-05
  • mysql怎么把字符串转换为数字类型
    mysql中将字符串转为数字类型的方法直接在字符串后面+0示例:SELECT '123'+0;使用CAST()函数语法:CAST(value AS type);示例:SELECT CAST('5.45' AS SIGNED); 使用CONV...
    99+
    2024-04-02
  • javascript中如何将值转为字符串类型
    这篇文章将为大家详细讲解有关javascript中如何将值转为字符串类型,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript中将值转为字符串的方法:1、使用toString()方法,语法“变...
    99+
    2023-06-14
  • sql怎么l将时间类型转换为字符串类型
    这篇文章主要讲解了“sql怎么l将时间类型转换为字符串类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sql怎么l将时间类型转换为字符串类型”吧!日期时间...
    99+
    2024-04-02
  • mysql中把字符串转换为int类型的方法
    这篇文章给大家分享的是有关mysql中把字符串转换为int类型的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql中把字符串转换为int类型的方法:可以利用Conver...
    99+
    2024-04-02
  • php怎么将字符串转为整数类型
    PHP中,整数类型是一种非常重要的数据类型,当我们需要进行数值计算时,往往需要将数值从字符串类型转换为整数类型。在PHP中,提供了多种将字符串转换为整数类型的方法,本文将介绍其中的几种方法。方法一:使用intval函数intval是PHP中...
    99+
    2023-05-14
    php php字符串
  • mysql字符串怎么转换为日期类型
    在MySQL中,可以使用STR_TO_DATE()函数将字符串转换为日期类型。函数语法如下:STR_TO_DATE(str,form...
    99+
    2023-10-09
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作