分享:Go语言使用字符串的几个技巧

2023-11-13

本文小编将给出一些Go语言在处理字符串方面的技巧,对大家学习Go语言具有一定的参考借鉴价值,下面一起看看吧。

一、字符串底层就是一个字节数组

这真的非常重要,而且影响着下面的其他几个技巧。当你创建一个字符串时,其本质就是一个字节的数组。这意味着你可以像访问数组一样的访问单独的某个字节。例如,下面的代码逐个打印字符串中的每个字节以及对应字节数组中的每个字节:

1

2

3

4

5

6

7

8

9

10

package main

import "fmt"

func main() {

  str := "hello"

  for i := 0; i < len(str); i++ {

    fmt.Printf("%b %s\n", str[i], string(str[i]))

  }

}

这是一个很重要的知识,因此才有了第二个技巧。。。

二、使用字节数组或缓冲区可以提升字符串连接的速度

在 Go 语言中字符串是只读的,这表示每次当你使用 str = str + "something" 时,实际上创建了一个新的字符串对象。如果你寻求代码的最高效率,这里应该使用字节缓冲区来替代,例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package main

import (

  "bytes"

  "fmt"

)

func main() {

  str := "something"

  buf := bytes.NewBufferString(str)

  for i := 0; i < 1000; i++ {

    buf.Write([]byte(randomString()))

  }

  fmt.Println(buf.String())

}

func randomString() string {

  ret := "pretend-this-is-random"

  return ret

}

如果使用字节数组会进一步提升上述代码的效率,但你需要知道最终字符串的大小。一个直观的例子就是 Go 语言中的 left-pad 实现。

三、你可以像拼接其他数组一样拼接字符串

当你需要截取字符串中的一部分时,可以使用像截取数组某部分那样来操作,示例代码:

1

2

3

4

5

6

7

8

9

package main

import "fmt"

func main() {

  str := "XBodyContentX"

  content := str[1 : len(str)-1]

  fmt.Println(content)

}

四、使用 ` 符号来创建多行字符串

这个相当简单,你希望在代码中定义一个包含多行地址信息的字符串,那么你需要用到 ` 这个字符,如下所示:

1

2

3

4

5

6

7

8

9

10

package main

import "fmt"

func main() {

  str := `Mr. Smith

123 Something St

Some City, CA 94043`

  fmt.Println(str)

}

五、你可以在字符串中嵌入 Unicode 字符

假设实现 WebSocket 通讯时,你需要让传输的数据以 0x00 开始,以 0xFF 结束[源码]

我们可以在任意字符串中通过如下代码实现:

1

2

3

4

5

6

7

8

package main

import "fmt"

func main() {

  str := "\x00BodyContent\xff"

  fmt.Println(str)

}

同样的,你可以使用 Unicode 字符串来处理,或者也可以在字符串中使用原始字符。例如,下面的代码都是有效的:

1

2

3

4

5

6

7

8

9

package main

import "fmt"

func main() {

  a := "ÿay!"

  b := "\u00FFay!"

  fmt.Println(a, b)

}

总结

关于Go语言使用字符串的技巧就分享到这了,大家都学会了吗?

转自:微点阅读   https://www.weidianyuedu.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分享:Go语言使用字符串的几个技巧 的相关文章

随机推荐

  • 关于glob.glob遍历文件

    我们经常会看到别人用glob 但是用glob时格式写的不规范往往会给人造成困扰 我们经常会有这个疑问 这到底是在遍历哪一层路径呢 下面我们就几种常见的glob用法给出总结 import glob 1 fdirs glob glob C Us
  • 将获取到的时间戳变成Date或者String 格式

    https blog csdn net u012031380 article details 52885120 1 时间戳的定义 时间戳是指文件属性里的创建 修改 访问时间 数字时间戳技术是数字签名技术一种变种的应用 在电子商务交易文件中
  • C++socket编程(三):3.3 bind端口

    在socket编程中 我们要用到bind绑定socket套接字 用上了你前面的逻辑创建的socket 如下代码 绑定 用bind绑定 绑定哪一个端口 if bind sock sockaddr saddr sizeof saddr 0 pr
  • 设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。

    1 设计一个学生类Student 包括数据成员 姓名 学号 二门课程 面向对象程序设计 高等数学 的成绩 2 创建一个管理学生的类Management 包括实现学生的数据的增加 删除 修改 按课程成绩排序 保存学生数据到文件及加载文件中的数
  • 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(301-400)

    文章目录 ADV 301 字符串压缩 cpp java ADV 302 秘密行动 cpp java ADV 303 数组求和 cpp java ADV 304 矩阵转置 cpp java ADV 305 输出二进制表示 cpp java A
  • ad域下发策略_AD域部署软件自动下发

    今天介绍如何使用组策略自动将程序分发到客户端计算机或用户 您可以通过以下方法使用组策略分发计算机程序 创建一个共享网络文件夹 将您要分发的 Microsoft Windows 安装程序包 msi 文件 放入此文件夹 对该共享设置权限以允许访
  • (elementui-图片预览)el-dialog+el-image图片显示问题

    项目场景 有一个修改的页面 这个页面有个预览按钮 其实点击图片使用v viewer已经实现了预览的功能了 现在做的是另一套方案 el image中预览图片 问题描述 当el dialog el image是直接写在addOrupdate v
  • boost升压电路解析

    1 boost拓扑 基本原理 1 1 电路接好 C上已经有电压 1 2 Q导通 电感储能 1 3 Q关断 电感释放能量 再次向C充电 使其高于Vi Vo Vin 1 D 极性相同 升压 2 元器件 开关管Q 储能电感L 整流二极管D 防止环
  • 单反相机的照片删了如何恢复

    单反相机的照片删了如何恢复 单反相机照片 视频等数据一般都储存在内存卡里 这是可以恢复的 当然 前提是没有被新数据覆盖 如果需要恢复的话 通常也都需要借助数据恢复软件 失易得数据恢复 进行修复 大部分软件在操作时都 第一步 打开 失易得数据
  • 如何利用J-Link烧写进行程序烧写

    1 准备工作 1 1硬件准备 准备一个烧写器 如下图所示 1 2软件准备 需要JLink软件安装包和驱动 如下图所示 JLink 652e rar为软件安装包 ST LINK V2 zip为驱动文件 首先安装J Link软件 解压第一个压缩
  • STM32小知识

    为什么电压常见3v3和5v 因为早期单片机用的都是TTL电平 TTL电平信号规定 5V等价于逻辑 1 0V等价于逻辑 0 采用二进制来表示数据时 这样的数据通信及电平规定方式 被称做TTL 晶体管 晶体管逻辑电平 信号系统 这是计算机处理器
  • css修饰边框为虚线,css如何设置虚线边框css虚线样式?css设置虚线边框的方法示例...

    首页 gt web前端 gt css教程 gt 正文 css如何设置虚线边框 css设置虚线边框的方法示例 原创2018 10 在网页布局中 有时候为了整体网页的美观可能需要设置虚线边框 那么虚线边框怎么设置呢 本篇文章就来给大家介绍一下如
  • arduino下载库出错_纯干货!关于Arduino 库在多种操作系统安装使用最详细、最全面的指南及常见问题解决办法!...

    什么是Arduino 库 Arduino库是一种共享开源代码 如设备驱动程序或常用实用程序函数 的最方便方式 Arduino 库是这个开源平台最大的特色之一 正是有了海量的Arduino开源库 让你无需花时间去了解和学习处理器底层的驱动程序
  • vue动态样式通过计算属性绑定的方法

    div class fayuan item typeName div
  • 超点图论文网络环境配置

    超点图环境配置 前言 一 检查环境情况并安装 1 检查是否安装有NVIDIA驱动 2 检查是否安装cuda 3 检查是否安装pytorch 4 安装相应库文件 二 常见问题 1 输入nvcc报错 总结 前言 提示 本文参照文章进行配置 环境
  • WebRTC中AECM算法简介

    1 算法介绍以及整体框架 1 1算法整体框架 AECM 属于 WebRTC 语音处理引擎 Voice Engine 的子模块 是为移动设备专门设计的回声消除处理模块 其内部有根据芯片类型进行汇编指令级的特殊优化 AECM 的主体工程文件可以
  • 调用微信内置 wx.config 配置问题

    var link location href ajax url WxJSSDK WxJS SDK aspx GetInfoMation 后台给你提供的接口 type Post data url link async false conten
  • [Spring Boot]04 使用IDEA快速搭建多模块项目

    目录 一 项目介绍 二 创建父工程 三 搭建多模块 1 搭建shopping api 2 搭建shopping bi 3 搭建shopping common 4 删除不需要的文件 5 多模块配置 1 父工程pom xml配置 2 子模块po
  • 打印回型数组-回型矩阵-环形数组

    刚才看到打印回形矩阵 或者回型数组 环形数组 网上一些方法感觉写的挺麻烦 还是自己写一遍吧 不妥之处还请各位看官不吝赐教 题目 输入一个整数N 打印出从1 N N的N N矩阵 比如N 3 构成矩阵 1 2 3 8 9 4 7 6 5 N 5
  • 分享:Go语言使用字符串的几个技巧

    本文小编将给出一些Go语言在处理字符串方面的技巧 对大家学习Go语言具有一定的参考借鉴价值 下面一起看看吧 一 字符串底层就是一个字节数组 这真的非常重要 而且影响着下面的其他几个技巧 当你创建一个字符串时 其本质就是一个字节的数组 这意味