1-6 字符串

1-6 字符串

在Go语言里面,字符串属于不可变数值类型,也就是是当变量的值发生改变时,其内存地址发生改变。在Go语言内部字符串是使用指针指向UTF-8数组。
当然,与不可变数值类型相反,可变数值类型的意思就是,当变量的值发生改变时,其内存地址不发生改变。

  • 默认值是空字符串 “”。
  • 用索引号访问某字节,如 s[i]。
  • 不能用序号获取字节元素指针,&s[i] ⾮非法。
  • 不可变类型,无法修改字节数组。
  • 字节数组尾部不包含 NULL
  • 使用 “`” 定义不做转义处理的原始字符串,支持跨行
s := `	a 
		b\r\n\x00 
		c`
println(s) 
  • 连接跨行字符串时,"+" 必须在上一行末尾,否则导致编译错误。
s := "Hello, " +
     "World!"
s2 := "Hello, "    
	  + "World!"    // Error: invalid operation: + untyped string
  • 支持用两个索引号返回子串(也就是对字符串进行切片)。子串依然指向原字节数组,仅修改了指针和长度属性。
s := "Hello, World!"
s1 := s[:5]                   // Hello 
s2 := s[7:]                   // World! 
s3 := s[1:5]                  // ello
  • 要修改字符串,可先将其转换成 []rune 或 []byte,完成后再转换为 string。无论哪种转换,都会重新分配内存,并复制字节数组。
func func2() {
	s := "abcdc"
	bs := []byte(s)
	bs[1] = 'C'
	println(string(bs))
	u := "电脑"
	us := []rune(u)
	us[1] = '话'
	println(string(us))
}
  • 对字符串进行遍历,可以使用for语句来进行
func func3() {    
	s := "abc汉字"
	for i := 0; i < len(s); i++ {       // byte        
		fmt.Printf("%c,", s[i])    
	}
    fmt.Println()
	for _, r := range s {               // rune        
		fmt.Printf("%c,", r)    
	} 
}	
  • 关于go语言的rune和byte字符
    go语言有两种字符类型,一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符,另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值