前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Golang】快速复习指南QuickReview(一)——字符串string

【Golang】快速复习指南QuickReview(一)——字符串string

作者头像
DDGarfield
发布2022-06-23 18:10:21
2040
发布2022-06-23 18:10:21
举报
文章被收录于专栏:加菲的博客加菲的博客

去年春节期间,突如其来的疫情,让博主学习了几天Golang,之后便一直缺乏使用。之前看到一些Golang项目的源码,发现自己对Golang好像有点不熟,艾宾浩斯记忆遗忘曲线告诉我们:要勤于复习。为了加深自己的记忆,又作为一个C#使用频率超高的.NET开发者,预备在接下来采用:C#与Golang的对比,以Golang为主,C#为辅的复习系列。既然是复习,面不会全部覆盖,所以这个系列并不是教程,如果想系统的学习,博主可推荐。

golang相对于其他语言(C#,python等),语法糖相对较少。大家都知道C#和python的语法糖很多,特别是python,有时候读别人写过的源码,不一定都能快速读懂,甚至几个开发人员编写的都不一样,而Golang不同,Golang只要坚持打牢基础,就能阅读源代码,甚至读懂,所以需要打牢基础(这也说明博主基础并不牢靠)。

String-字符串

1.C#的字符串

字符串在C#中,是一个特殊的类型,不能简单把它归纳为值类型,或者引用类型。需要记住的有两点:

  • 1.无论对字符串做什么操作,都会在内存中生成一个新的实例,即使是一个简单的重新赋值操作。
  • 2.string字符串可以看作一个只读数组。
代码语言:javascript
复制
string name="randyfield";
char name_0=name[0];
name[0]="R";//错误:内部是一个索引器,public char this[int index] { get; },只读的

2.Golang的字符串

字符串在Golang中,string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,其他没多少内容,唯一需要注意的就是字符:

  • 如果是英文字符,就用byte,实质是一个int8类型,常用来处理ascii字符
  • 如果是中文、日文或者其他符合字符就用 rune,实在是一个int32类型,常用来处理unicodeutf-8字符

3.字符串翻转

最后来巩固一下,用两者代码分别实现字符串翻转,效果如下:"RandyField 喜欢吃凤尾!"---"!尾凤吃欢喜 dleiFydnaR"

1 C#实现

代码语言:javascript
复制
string Reverse(string str)
{
    //转换为数组
    char[] nameArray = str.ToCharArray();
    for (int i = 0; i < nameArray.Length / 2; i++)
    {
        char temp;
        temp = nameArray[i];
        nameArray[i] = nameArray[nameArray.Length - 1 - i];
        nameArray[nameArray.Length - 1 - i] = temp;
    }
    return new string(nameArray);
}

C# 为我们提供了很多api,还可以更简单

代码语言:javascript
复制
 static string StringReverse(string str)
 {
      return new string(str.ToCharArray().Reverse().ToArray());
 }

2 Golang实现

代码语言:javascript
复制
func Reverse(str string) string {
    //转换为切片
 strSlice := []rune(str)
 for i := 0; i < len(strSlice)/2; i++ {
  var temp rune
  temp = strSlice[i]
  strSlice[i] = strSlice[len(strSlice)-1-i]
  strSlice[len(strSlice)-1-i] = temp
 }
 return string(strSlice)
}

使用Golang的多重赋值的特性,把脏活累活扔给编译器,代码可以更简单:

代码语言:javascript
复制
func reverse(str string) string {
    //转换为切片
 strSlice := []rune(str)
 for i, j := 0, len(strSlice)-1; i < j; i, j = i+1, j-1 {
  strSlice[i], strSlice[j] = strSlice[j], strSlice[i]
 }
 return string(strSlice)
}

强调:这个系列并不是教程,如果想系统的学习,博主可推荐学习资源。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • String-字符串
    • 1.C#的字符串
      • 2.Golang的字符串
        • 3.字符串翻转
          • 1 C#实现
          • 2 Golang实现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档