包含关系

  1. // 子串substr在s中,返回true
  2. func Contains(s, substr string) bool
  3. // chars中任何一个Unicode代码点在s中,返回true
  4. func ContainsAny(s, chars string) bool
  5. // Unicode代码点r在s中,返回true
  6. func ContainsRune(s string, r rune) bool

字符串转换

下面行为会出现数据越界,但是会返回最大值127

  1. func TestStrConInt(t *testing.T) {
  2. n, err := strconv.ParseInt("128", 10, 8)
  3. if err != nil {
  4. t.Log(err)
  5. }
  6. t.Log(n)
  7. }

strings.Builder

已存在的内容不可变,但可以拼接更多的内容;
减少了内存分配和内容拷贝的次数;
可将内容重置,可重用值。

strings.Reader

Reader 类型
看到名字就能猜到,这是实现了 io 包中的接口。它实现了

  1. io.ReaderRead 方法)
  2. io.ReaderAtReadAt 方法)
  3. io.SeekerSeek 方法)
  4. io.WriterToWriteTo 方法)
  5. io.ByteReaderReadByte 方法)
  6. io.ByteScannerReadByte UnreadByte 方法)
  7. io.RuneReaderReadRune 方法)
  8. io.RuneScannerReadRune UnreadRune 方法)。

Reader 结构如下:

  1. type Reader struct {
  2. s string // Reader 读取的数据来源
  3. i int // current reading index(当前读的索引位置)
  4. prevRune int // index of previous rune; or < 0(前一个读取的 rune 索引位置)
  5. }

可见 Reader 结构没有导出任何字段,而是提供一个实例化方法:

  1. func NewReader(s string) *Reader
  1. sr := strings.NewReader("0123456789A")
  2. b := make([]byte, 5)
  3. for {
  4. n, err := sr.Read(b)
  5. if err != nil {
  6. fmt.Println(err)
  7. break
  8. }
  9. fmt.Printf("%d %q\n", n, b[:n])
  10. }