Monkey

个人站

The master has failed more times than the beginner has tried


GO语言中字符串

  • string 类型
    • string 是数据类型,不是引用或指针类型,零值是一个空字符串。
    • string 是只读的 byte slicelen 函数 可以它包含的 byte
    • string 的 byte 数组可以存放任何数据【汉字,英文,二进制等】
      func TestString(t *testing.T)  {
      	var s string
      	t.Log(s) // 初始化为默认零值 ""
      	s = "hello"
      	t.Log(len(s)) // byte 数是 5
      	//s[1] = "s" // string 是不可变的 byte slice
      	s = "\xE4\xB8\xA5" // 可存储任何二进制数据
      	t.Log(s) // 严
      	t.Log(len(s)) // len 是 byte 数  3,并不一定是字符数
      }
    
  • Unicode。& UTF8
    • Unicode 是一种字符集
    • UTF8 是 unicode 的存储实现(转换为字节序列的规则)
      func TestString(t *testing.T)  {
      	var s string
      	s = "中"
      	t.Log(len(s)) // 是 byte 数  3
      	c := []rune(s)
      	t.Log(len(c)) // rune的 unicode 编码 1
      	t.Logf("中 unicode %x", c[0]) // %x 是输出 十六进制 4e2d
      	t.Logf("中 UTF8 %x", s) // utf8 的输出  e4b8ad
      }
    
    字符  
      Unicode 0x4E2D
      UTF8 0xE4B8AD
      String/[]byte [0xE4,0xB8,0xAd]
  • 遍历string 转换成 rune,每一次迭代输出的是 rune,不是 byte
func TestStringToRune(t *testing.T)  {
	s := "中华人名共和国"
	for _, c := range s{
		t.Logf("%[1]c %[1]d", c) // 占位符 [1] 的意思是 两个占位符都是和第一个参数对应
	}
	/**
		string_test.go:25: 中 20013
	    string_test.go:25: 华 21326
	    string_test.go:25: 人 20154
	    string_test.go:25: 名 21517
	    string_test.go:25: 共 20849
	    string_test.go:25: 和 21644
	    string_test.go:25: 国 22269
	 */
}
  • string 类型的 package
    • strings
    • strconve

    • 字符串转 slice , 字符串连接
      package string_test
    
      import (
      	"strings"
      	"testing"
      )
        
      func TestStringFun(t *testing.T)  {
      	s := "a, b, c, d"
      	s_slice := strings.Split(s, ",") // string 转 slice
      	t.Log(s_slice) // [a  b  c  d]
      	t.Log(strings.Join(s_slice, "-")) // 字符串连接  join  a- b- c- d
      }
    
    • string 转换
      package string_test
    
      import (
      	"strconv"
      	"strings"
      	"testing"
      )
        
      func TestConv(t *testing.T)  {
      	s := strconv.Itoa(10) // int 转换 字符串
      	t.Log(s + "str") // 10str
      }
    
    • 字符串转整型, strconv.Atoi 的 ok patten 模式
      func TestConv(t *testing.T)  {
      	//s := strconv.Itoa("10") // int 转换 字符串
      	if val, ok := strconv.Atoi("10"); ok == nil {
      		t.Log(val + 10)
      	} else {
      		t.Log("fail")
      	}
      	//t.Log(s + "str") // 10str
      }
    

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦