Go语言入门到实战——08.Go语言里的字符串类型的细节与使用

本文介绍了Go语言中string类型的特点,如不可变性、byte数组的使用,以及Unicode编码(包括UTF-8)在处理汉字时的长度计算。通过实例演示了如何操作字符串,如分割、连接、转换和Unicode字符操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go语言入门到实战——00主目录
在上一讲中我们学习了Go语言的map集合相关的知识。

一.go里面的string的与主流语言的差异性

1.string是数据类型,不是引用或者指针类型
2.string的底层是一个不可变的(注意不可变)byte slice(切片),我们可以使用len函数
,但是得到的是byte,注意byte数不一定就是string的长度,后面会进行演示
3.stringbyte数组可以存放任何的数据的(重点)
package test

import "testing"

func TestMap(t *testing.T) {
	var s string
	t.Log(s) //初始化空字符串
	s = "yes"
	// s[0] = '1' //string是可变的slice,这行代码会报错
	t.Log(s)
	t.Log(len(s))
	s = "\xE4\xB8\xA5" //这是一个中国汉字
	t.Log(s, len(s))   //只有一个汉字字符,长度却是3,证明返回的是byte的长度,
					   //而不是字符串的字符数
}


在上面的代码当中可能大家会对汉字那部分代码比较好奇,这里讲一下Unicode和UTF-8编码:

1.Unicode是字符集(code point编码方式)
2.UTF-8则是Unicode字符集的存储实现方式(即转化为字节序列的规则)

接下来以代码来加以理解:

package test

import "testing"

func TestMap(t *testing.T) {
	var s string = "中"
	c := []rune(s) //将s转换为对应的Unicode字符
	t.Logf("中 Unicode is %x", c[0])
	t.Logf("中 UTF-8 is %x", s)
}



补充一点string的rune的遍历:

package test

import "testing"

func TestMap(t *testing.T) {
	var s string = "中"
	for _, c := range s { //c是rune类型
		t.Logf("%[1]c %[1]d", c) //[]用来指明使用哪一个参数1代表使用
								 //第一个参数c(当然这里也只有这一个)
	}
}

二.string的常用函数

1.分割与连接

package test

import (
	"strings"
	"testing"
)

func TestMap(t *testing.T) {
	var s string = "A,B,C,D"
	parts := strings.Split(s, ",")
	for _, val := range parts {
		t.Log(val)
	}
	joins := strings.Join(parts, "-")
	t.Log(joins)
}


2.字符串与整型互相转换

package test

import (
	"strconv"
	"testing"
)

func TestMap(t *testing.T) {
	var s int = 10
	t.Log("abc" + strconv.Itoa(s))
	if val, err := strconv.Atoi("10"); err == nil { //看返回是否转换错误
		t.Log(1 + val)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值