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

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)
	}
}

猜你喜欢

转载自blog.csdn.net/qq_44932835/article/details/121583386