go语言源码赏析之strings

Posted chenguifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言源码赏析之strings相关的知识,希望对你有一定的参考价值。

0.字符串为不可变类型,内部使用指针指向UTF-8字节数组

不过要修改字符串可以先将其转换成[]byte或者[]rune。如下

package main

func main() {
	s := "abcd"
	bs := []byte(s)

	bs[1] = ‘B‘
	println(string(bs))

	u := "电脑"
	us := []rune(u)

	us[1] = ‘话‘
	println(string(us))
}

输出:

aBcd

电话

for遍历字符串有byte和rune两种方式,见代码

package main

import (
	"fmt"
)

func main() {
	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)
	}

	fmt.Println()
}

  输出

a,b,c,?,?,
a,b,c,汉,字,

一些常用接口

1.判断是不是以某个字符串开头

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello world"
	res0 := strings.HasPrefix(str, "http://")
	res1 := strings.HasPrefix(str, "hello")
	fmt.Printf("res0 is %v
", res0)
	fmt.Printf("res1 is %v
", res1)
}

  输出

res0 is false
res1 is true

 

源码片段

// HasPrefix tests whether the string s begins with prefix.
func HasPrefix(s, prefix string) bool {
	return len(s) >= len(prefix) && s[0:len(prefix)] == prefix
}

 2.判断是不是以某个字符串结尾

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello world"
	res0 := strings.HasSuffix(str, "http://")
	res1 := strings.HasSuffix(str, "world")
	fmt.Printf("res0 is %v
", res0)
	fmt.Printf("res1 is %v
", res1)
}

 输出

res0 is false
res1 is true
源码片段
// HasSuffix tests whether the string s ends with suffix.
func HasSuffix(s, suffix string) bool {
	return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
}

  

待续...



以上是关于go语言源码赏析之strings的主要内容,如果未能解决你的问题,请参考以下文章

Fresco源码赏析 之 基本流程

spring boot 源码赏析之事件监听

Fresco源码赏析 之 图片显示流程

Cocos2dx源码赏析之渲染

深度解密Go语言之unsafe

Go语言基础之包