• GoLang学习控制语句之字符串


    Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支持 Unicode 字符。在标准库 unicode 包及其子包 utf8、utf16中,提供了对 Unicode 相关编码、解码的支持,同时提供了测试 Unicode 码点(Unicode code points)属性的功能。Go语言中的字符串也可能根据需要占用 1至 4 个字节。

    Go语言支持以下2种形式的字符串:

    • 解释性字符串:带引号的字节序列。该类字符串使用双引号括起来,其中的相关的转义字符将被替换。例如:
    str := "zhihu"
    
    • 原生字符串: 该类字符串使用反引号(注意:不是单引号)括起来,支持换行。例如:
    `This is a raw string 
    ` 
    

    获取字符串长度可以用内置的函数len。

    字符串函数包

    strings 包提供了很多操作字符串的简单函数,通常一般的字符串操作需求都可以在这个包中找到。例如:

    • 判断是否以某字符串打头/结尾
    strings.HasPrefix(s, prefix string) bool 
    strings.HasSuffix(s string, suffix string) bool
    
    • 字符串分割
    strings.Split(s string, sep string) []string
    
    • 字符串连接
    strings.Join(a []string, sep string) string 
    
    • 字符串替换
    strings.Replace(s, old, new string, n int) string
    
    • 字符串转化为大小写
    strings.ToUpper(s string) string 
    strings.ToLower(s string) string
    
    • 统计某个字符在字符串出现的次数
    strings.Count(s string, sep string) int
    

    strconv 包提供了基本数据类型和字符串之间的转换。在 Go 中,没有隐式类型转换,一般的类型转换可以这么做:int32(i),将 i (比如为 int 类型)转换为 int32,然而,字符串类型和 int、float、bool 等类型之间的转换却没有这么简单。与字符串相关的类型转换都是通过 strconv 包实现的。针对从数字类型转换到字符串,Go 提供了以下函数:

    strconv.Itoa(i int) string
    

    字符串和字节数组

    字符串的本质就是一个字节数组。在Go 语言里面字符串和字节数组可以相互进行显式转换,这一性质通常被用来“修改”字符串的内容。

    因为Go 语言中的字符串是不可变的,也就是说 str[index] 这样的表达式是不可以被放在等号左侧的。如果尝试运行 str[i] = 'D'会得到错误:cannot assign to str[i]。

    因此必须先将字符串转换成字节数组,然后再通过修改数组中的元素值来达到修改字符串的目的,最后将字节数组转换回字符串格式。示例代码如下:

    package main
    import (
        "fmt"
    )
    
    var name string //声明一个字符串
    var emptyname string = "" //声明一个空字符串
    
    func main() {
        //申明多个字符串并且赋值
        a, b, v := "hello", "word", "widuu"
        fmt.Println(a, b, v)
    
        c := []byte(a)   //转换字符串的内容,先转换a的类型为[]byte
        c[0] = 'n'  //赋值
        //在转换成字符串类型,其实我们发现我们的a并没有改变
        //而是一个新的字符串的改变
        d := string(c)  //转换为字符串
        fmt.Println(a)  //hello
        fmt.Println(c)  //[110 101 108 108 111]    
        fmt.Println(d)  //nello
    
    }
    

    使用buffer高效拼接字符串

    使用bytes.Buffer来组装字符串,不需要复制,只需要将添加的字符串放在缓存末尾即可。不过需要强调,Golang源码对于Buffer的定义中并没有任何关于锁的字段,所以Buffer是线程不安全的。

  • 相关阅读:
    快直播-基于WebRTC升级的低延时直播
    在HTML5上开发音视频应用的五种思路
    H.265/HEVC Web端直播播放器内核开发解密
    FFmpeg 命令行和API方式转换rtsp或264成Fragmented MP4
    rtsp流转为fmp4并由WebSocket网关转发,及对应js播放器
    基于FFMPEG封装aac及h264为FargmentMP4
    HTML5 直播协议之 WebSocket 和 MSE fmp4
    wasm + ffmpeg实现前端截取视频帧功能
    es~ElasticsearchTemplate的查询和聚合
    springboot~通过面向接口编程对控制反转IOC的理解
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8954126.html
Copyright © 2020-2023  润新知