Go学习之路(六)字符串

字符串

与其他主要编程语言的差异

  • 1、string 是数据类型,不是引用或指针类型
  • 2、string 是只读的 byte slice, len 函数可以它所包含的 byte 数
  • 3、string 的 byte 数组可以存放任何数据

Unicode UTF8

  • 1、Unicode 是一种字符集(code point)
  • 2、UTF8 是 unicode 的存储实现(转换为字节序列的规则)
    例子1:
func TestString(t *testing.T) {
    var s string
    t.Log(s)
    s = "hello"
    t.Log(len(s))          // 这里打印出来的不是string的长度,而是byte长度
    // s[1]='3'    // string 是不可变的byte slice
    s = "\xE4\xB8\xA5"
    t.Log(s)
    s = "\xE4\xBA\xBB\xFF"    // 乱码
    t.Log(s)
    t.Log(len(s))
    s = "中"
    t.Log(len(s)) // 是 byte 长度
    c := []rune(s)
    t.Log("rune size:", unsafe.Sizeof(c[0]))
    t.Logf("中 unicode %x", c[0])
    t.Logf("中 UTF8 %x",s)
}

运行结果

           // 为空
5
严
亻�
4
3
rune size: 4
中 unicode 4e2d
中 UTF8 e4b8ad

例子2:

func TestStringToRune(t *testing.T){
    s :="我爱学习,学习使我快乐"
    for _,j :=range s{
        t.Logf("%[1]c %[1]d",j)   // 这里的[1]的意思是都对应第一个参数,只不过方式是%c格式化,%d格式化
    }
}

运行结果

我 25105
爱 29233
学 23398
习 20064
, 65292
学 23398
习 20064
使 20351
我 25105
快 24555
乐 20048

编码与存储

编码 存储
字符 "中"
Unicode 0x4E2D
UTF-8 0xE4B8AD
string/[]byte [0xE4,0xB8,0xAD]

字符串分割、拼接

package string_fn

import (
    "strings"
    "testing"
)

func TestStringFn(t *testing.T){
    s :="A,B,C"
    parts := strings.Split(s,",")     // 字符串分割
    for _,part :=range parts{           // 这里的"_"不能省略,否则打印出来的是索引
        t.Log(part)
    }
    t.Log(strings.Join(parts,"-"))   // 字符串拼接
}

运行结果

A
B
C
A-B-C

类型转换

string转成int: 
int, err := strconv.Atoi(string)
string转成int64: 
int64, err := strconv.ParseInt(string, 10, 64)
int转成string: 
string := strconv.Itoa(int)
int64转成string: 
string := strconv.FormatInt(int64,10)

例子:

package string_fn

import (
    "reflect"
    "strconv"
    "testing"
)
func TestConv(t *testing.T){
    s := strconv.Itoa(10)   // int 转 string
    t.Log(s,reflect.TypeOf(s))       // reflect.TypeOf()   查询变量类型
    if s1,err :=strconv.Atoi(s);err == nil{     // string 转 int
        t.Log(s1,reflect.TypeOf(s1))
    }
    if s2,err :=strconv.ParseInt(s,10,64); err==nil{         // string 转 int64
        t.Log(s2,reflect.TypeOf(s2))
        s3 := strconv.FormatInt(s2,10)     // int64 转 string
        t.Log(s3,reflect.TypeOf(s3))
    }


}

运行结果

10 string
10 int
10 int64
10 string

你可能感兴趣的:(Go学习之路(六)字符串)