Go字符串

目录

一、与其它主要编程语言的差异

二、Unicode 和 UTF8

1、Unicode

2、UTF8

3、Unicode 和 UFT8之间的的关系

4、字符串转 rune

三、常用的字符串处理函数

1、strings 包

2、strconv 包

3、操作字符串的常用函数

4、strconv 包的用法


一、与其它主要编程语言的差异

  • string 是数据类型,不是引用或指针类型;
  • string 是只读的 byte 切片,len() 函数返回的是它所包含的 byte 数,这个 byte 数和字符串中含有多少个字符是不一样的
  • string 的 byte 数组可以存放任何数据,不仅仅可有存放可见字符如汉字,英文等,还可以用来存放完全不属于可见字符范围的二进制数据也可以存储。
package string

import "testing"

//string类型的长度是 byte 的长度,不是字符的长度
func TestString(t *testing.T)  {
	//定义个 string
	var str string
	t.Log(str) //刚刚初始化,s 的值为空字符串


	str = "hello"
	//英文字符的长度,刚好就是字符的个数
	t.Logf("str's length is: %d", len(str))	//str's length is: 5


	//string 类型可以存储任何二进制数据,这是"严"字的十六进制
	str = "\xE4\xB8\xA5"
	t.Log(str)	//严
	//len() 函数求出来的是 string 的 byte 数,不是字符数,一个汉字刚好占 3 个 byte
	t.Logf("str's length is: %d", len(str))	//str's length is: 3


	//我们随便写一个十六进制数,看能不能存入 string
	str = "\xE4\xBA\xB1\xFF"
	//string 可以存放任何十六进制数,虽然乱码,但是确实是可以存储
	t.Log(str)	//亱�


	// string 类型是不可变的 byte 切片,不能修改某个 byte 的值
	// str[1] = 3	//can't assign to str[1]
}

二、Unicode 和 UTF8

1、Unicode

Unicode是一种字符集,也叫万国码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。

如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。

2、UTF8

UTF8是 Unicode 的一种存储实现,就是以字节(8bit)为单位对Unicode进行编码。

package string

import "testing"

//Unicode 和 UFT8 之间的关系
func TestUnicodeAndUtf8(t *testing.T) {
	str := "中"

	//返回的是 byte 数
	t.Log(len(str))	//3

	//rune 是 Go 语言中能取出字符串的 unicode 值,这是 Go 语言的一个内置机制
	c := []rune(str)

	//"中"这个字的 rune 长度为 1
	t.Log(len(c))	//1
	//"x%" : 是以 16 进制进行输出
	t.Logf("中的 unicode is %x", c[0])	//中的 unicode is 4e2d
	t.Logf("中的 UTF8 is %x", str)		//中的 UTF8 is e4b8ad
}

3、Unicode 和 UFT8之间的的关系

字符
Unicodeox4e2d
UFT-80xe4b8ad
string / []byte[0xE4, 0xB8, 0xAD]

4、字符串转 rune

package string

import "testing"

//字符串转 rune
func TestStringToRune(t *testing.T)  {
	str := "中华人民共和国"

	//将字符串进行 range,得到的一个一个 rune 值
	for _, c:= range str {
		//%[1]c %[1]x 是指将 第一个参数(是一个 rune 值)同时以 %c 和 %x 来进行格式化
		//%c 是已字符的格式进行输出
		//%x 是已十六进制来进行输出
		t.Logf("%[1]c %[1]x", c)

		/*输出结果为:
		string_test.go:13: 中 4e2d
		string_test.go:13: 华 534e
		string_test.go:13: 人 4eba
		string_test.go:13: 民 6c11
		string_test.go:13: 共 5171
		string_test.go:13: 国 56fd
		string_test.go:13: 和 548c*/
	}
}

三、常用的字符串处理函数

1、strings 包

https://golang.org/pkg/strings

2、strconv 包

https://golang.org/pkg/strconv

3、操作字符串的常用函数

package string

import (
	"strings"
	"testing"
)

//操作字符串的常用函数
func TestStringFun(t *testing.T)  {
	str := "A,B,C"

	//字符拆分
	parts := strings.Split(str, ",")

	for _, part := range parts {
		t.Logf(part)

		/*输出结果为:
		string_fun_test.go:14: A
		string_fun_test.go:14: B
		string_fun_test.go:14: C*/
	}

	//字符串连接
	strNew := strings.Join(parts, "-")

	t.Logf(strNew)	//A-B-C
}

4、strconv 包的用法

//strconv 包的用法
func TestStrConv(t *testing.T) {
	//将整数转为字符串
	str := strconv.Itoa(10)

	t.Logf("str's value is %s, and it's format is %T", str, str)
	//输出结果:
	//str's value is 10, and it's format is string


	//如果这样写,会报这个编译错误: 1 variable but strconv.Atoi returns 2 values,
	//也就是说将字符串转为整数是有两个返回值的,这行将整数转为字符串不一样
	//number := strconv.Atoi(str)

	if number, err := strconv.Atoi(str); err == nil {
		t.Logf("number's value is %d, and it's format is %T", number, number)

		//输出结果:
		//number's value is 10, and it's format is int
	}
}

:这篇博文是我学习中的总结,如有转载请注明出处:

https://blog.csdn.net/DaiChuanrong/article/details/117968619

上一篇Go Map

下一篇Go 函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值