当前位置: 首页 > news >正文

p2p网站建设广州电子系统设计网站

p2p网站建设广州,电子系统设计网站,小地方网站建设公司,玉田网站建设在这篇文章中#xff0c;我们将讨论 Golang 中的字符串#xff0c;并查看一些不同的场景#xff0c;以避免常见错误。让我们深入探讨#xff01; 1. 字符串是否可以为 nil#xff1f; 我们已经对 Golang 中的字符串有了基本的了解#xff0c;但我们可以从 Golang 字符串…在这篇文章中我们将讨论 Golang 中的字符串并查看一些不同的场景以避免常见错误。让我们深入探讨 1. 字符串是否可以为 nil 我们已经对 Golang 中的字符串有了基本的了解但我们可以从 Golang 字符串不能为 nil 开始除非您使用指向字符串的指针。 如下代码所示当我们创建一个字符串变量时默认值必须是空的。如果我们用 nil 值初始化字符串变量我们将面临在变量声明中不能使用 nil 作为字符串值的错误。例如 func main() {var s strings nil // Cannot use nil as the type stringfmt.Println(s) }编译器会提示我们不能使用 nil 赋予 string 类型。因此我们可以只是定义变量或者使用作为默认值 func main() {var s stringvar ss fmt.Println(s, ss) } 如果我们坚持在字符串类型变量中使用 nil 值则应使用指针如下所示 func main() {var s *stringfmt.Println(s) } 这个时候输出则为 nil但是我们必须谨慎使用这种方法。每次要为变量赋值时我们都必须编写更多的代码而且在赋新值之前还要检查是否有零值或前一个值。 func main() {var s *stringtmp : hellos tmpfmt.Printf(address: %v, value: %s, s, *s) } 这个时候打印出来 s 的地址以及所指向的值 address: 0xc00008a030, value: hello2. 字符串是不可变的 Golang 中的字符串是不可变的这意味着我们不能更改每个字符的值。例如 func main() {tmp : hellotmp[0] Jfmt.Println(tmp) } 上述代码会导致编译时错误因为无法赋值给 tmp[0]。 更改字符串中单个字符的常见错误如下 func main() {tmp : hellotbs : []byte(tmp)tbs[0] Jfmt.Println(string(tbs))chi : 你好chiTBS : []byte(chi)chiTBS[0] Jfmt.Println(string(chiTBS)) } 输出为 Jello J好虽然第一个输出显示的结果符合我们的预期但这并不是更改某个字符的正确方法。 这是因为我们打算修改的单个部分可能存储在多个字节中即使你想将变量转换为符文类型并更改你想要的部分我也不得不说这是不可能做到的因为它可能被放置在多个符文中我们需要谨慎行事 3. 字符串是字节数组 在 Golang 中字符串由字节字节的片段组成某些字符需要存储在多个字节中例如“♥”。 因此当需要确定一个字符串类型变量的长度时我们必须谨慎编码。例如 func main() {tmp : fmt.Println(bytes: , len(tmp))fmt.Println(runes: , utf8.RuneCountInString(tmp)) } len 函数返回的是字符串的字节数而不是字符数。当我们需要找出字符串的符文数时可以使用 uft8.RuneCountIntString() 函数。 另一个常见的误解是使用 uft8.RuneCountIntString() 来确定字符数但这并不是在任何情况下都正确因为一个字符串变量可能跨越多个符文。请看这个例子 func main() {tmp : ❤️fmt.Println(bytes: , len(tmp))fmt.Println(runes: , utf8.RuneCountInString(tmp)) } 输出为 bytes: 6 runes: 2 字符串索引和forrange 在 Golang 中使用索引检索字符串的单个部分将为我们提供字符的 uint 值并且只能检索第一个字节。但在字符串变量的 for 循环中我们可以访问每个字符的符值 func main() {tmp : ❤%……*fmt.Printf(char at 0 index, has type %T and value is %v\n, tmp[0], tmp[0])for _, t : range tmp {fmt.Printf(value is %v type is %T\n, t, t)} } 输出 char at 0 index, has type uint8 and value is 226 value is 10084 type is int32 value is 65509 type is int32 value is 37 type is int32 value is 8230 type is int32 value is 8230 type is int32 value is 38 type is int32 value is 42 type is int32 在对字符串进行迭代时还要注意变量中可能存在的非 UTF8 字符如果 Golang 无法将其理解为 UTF8则会使用 unicode 替换而非实际值。 5. 字符串平等 在 Golang 中我们总是可以使用 来检查简单的字符串是否相等但如果我们的变量存在隐藏点则应在比较两个字符串变量之前使用 unicode 规范包将其规范化 func main() {cafe1 : Cafécafe2 : Cafe\u0301normalizeCafe1 : norm.NFC.String(cafe1)normalizeCafe2 : norm.NFC.String(cafe2)fmt.Println(cafe1 cafe2)fmt.Println(normalizeCafe1 normalizeCafe2) } 6. 高效字符串构建 使用“”连接大量字符串的效率可能非常低。使用 strings.Builder 是高效构建字符串的最佳方法之一 func main() {sb : strings.Builder{}for i : 0; i 1000; i {sb.WriteString(hello )}result : sb.String()fmt.Println(result) }与传统的 连接方法相比这种方法速度更快内存消耗更少而且可以避免创建不必要的中间字符串。我们还可以使用 bytes.Buffer 软件包来实现这一目标。 总结 字符串的默认值是len 和 RuneCountIntString 函数具有不同的行为我们应该小心 for 循环和字符串字符串相等是我们需要更精确的地方
http://www.pierceye.com/news/355295/

相关文章:

  • 那家财经网站做的好陕西网站建设公司哪有
  • 淄川网站建设中小型企业网站建设
  • phpcms 投资 网站源码wordpress主题网站
  • 聊城网站托管义乌外贸公司联系方式
  • 开发一个小程序对网站做综合搜索引擎优化分析
  • 网站开发自学网有哪些企业可以做招聘的网站有哪些
  • 网站怎么做百度推广网站开发者模式
  • 学校网站设计制作目的做网站推广方法
  • wordpress建站云平台小程序商城开发平台
  • pc网站转换成微网站网站建设开发哪家质量好
  • wordpress网站使用教程aspnet东莞网站建设多少钱
  • 网站地图提交给百度证券公司如何拉客户
  • 做外贸有哪些免费的网站win7优化大师好不好
  • 网站功能怎么写上海网站制作建设怎么样
  • 网站域名是网站架构吗成都网站搭建优化推广
  • 自己做的网站添加交费功能合肥有什么好的网站建设公司好
  • 做网站品牌龙岩新增病例行动轨迹
  • 任家房网站建设郑州百度网站推广
  • 深圳建设网站的公司简介WordPress多功能投稿
  • 简述织梦网站上传及安怎样在网站上做免费的推广
  • 关于信用体系建设的网站wordpress新闻类模板下载
  • 免费行情软件网站下载大全爱学校vi设计案例
  • 网站外包优化怎样做免费抽皮肤的网站
  • 东八区网站建设网站源码在哪里
  • 重点建设专业 专题网站搜狗官方网站
  • 微信营销工具有哪些使用最佳搜索引擎优化工具
  • 网站推广意识薄弱wordpress授权协议
  • 用php做高中数学题库网站阿里网站建设教程
  • 大兴网站建设公司电话东莞企业网站制作怎么做
  • 网站维护有啥用2021跨境电商最火的产品