Go中字符串的遍历

Python069

Go中字符串的遍历,第1张

首先说一下go中的字符串类型:

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。

下面介绍字符串的三种遍历方式,根据实际情况选择即可。

该遍历方式==缺点==:遍历是按照字节遍历,因此如果有中文等非英文字符,就会出现乱码,比如要遍历"abc北京"这个字符串,效果如下:

可见这不是我们想要的效果,根据utf-8中文编码规则,我们要str[3]str[4]str[5]三个字节合起来组成“北”字及 str[6]str[7]str[8]合起来组成“京”字。由此引出下面第二种遍历方法。

该方式是按照字符遍历的,所以不会出现乱码,如下:

运行结果:

从图中可以看到第二个汉子“京”的开始下标是6,直接跳过了4和5,可见确实依照utf8编码方式将三个字节组合成了一个汉字,str[3]-str[5]组合成“北”字,str[6]-str[8]组合成了“京”字。

由于下标的不确定性,所以引出了下面的遍历方式。

1 可以先将字符串转成 []rune 切片

2 再用常规方法进行遍历

运行效果:

由此可见下标是按1递增的,没有产生跳跃现象。

除了Java、Python和JavaScript之外,如果要开始学习一门新语言的话,我想应该是Go!

Go语言正在被越来越多的公司使用。我们公司的后端服务已经全面采用Go语言实现了。

最开始接触Go语言是去年将一份Go代码“翻译”成Python并集成到测试平台上,说来也挺神奇,我从来没学过Go却完成了这个工作,这也侧面反应了Go的语法还是很平易近人的。

今年,在海翔飞调岗之后已经没有太多时间写代码了,但如果要开始学习一个新的语言或技术的话,我最想学的是Go!

目前来看,Go似乎还并没有太多测试人员使用的场景,不过,我之前介绍过的BDD行为驱动框架gauge是由Go开发的,当然,它也支持使用Go来编写BDD测试代码。

对于,已经有一定开发经验的同学,如何快速的开始学习Go语言呢?我这里给一些思路。

#### 第一步:下载和安装

在配置环境的时候你需要重点了解GOROOT、GOPATH的作用。

你还要准备一款称手的编辑器,如果你像我一样,一直都在使用VS Code的话,那么就它就可以了。

#### 第二步:从hello world开始

先运行一个hello world程序,认识Go语言的语法。

package main

import (    "fmt")

func main(){

fmt.Println("helloworld!")

}

#### 第三步:熟悉Go的语法

接下来,你可能要花一周左右的时间熟悉Go语言的语法。比如,变量定义、if/for、函数、Map、跨文件的程序调用…等,当然,还有一些Go特有的知识。

当然,我更喜欢看视频教程,虽然质量参差不齐,但我仍然觉得看视频比我自己看书更有效率。

熟悉一段Go代码:

package main

import"fmt"

func myFunc() {

i := 0

Here:   //这行的第一个词,以冒号结束作为标签

fmt.Println(i)

i++    if i <10{        goto Here   //跳转到Here去

}

}func main() {    //调用函数

myFunc()

}

#### 第四步:Go如何做单元测试

针对Go做测试也非常简单。比如,这是一个被测试文件:add.go。

package test_demofunc Add(a int, b int) int{    return a + b

}

下面针对Add()函数编写测试用例,test_add.go

package test_demo

import (    "testing")

func TestAdd1(t *testing.T){

r:= Add(1, 2)    if r !=3{

t.Errorf("Add(1, 2)failed. Got %d, expected 3.", r)

}

}

func TestAdd2(t *testing.T){

r:= Add(2, 2)    if r !=4{

t.Errorf("Add(2, 2)failed. Got %d, expected 4.", r)

}

}

你只需要执行 go test 命令就可以运行上面的测试了。

#### 第五步:从哪儿找第三方库

当然,你只学习go语言本身,基本是做不了什么事的,必须要使用第三方扩展库。

这里罗列了Go语言的第三方库,通过这些第三方库的介绍,我们也可以大概知道Go可以用来干什么。

如果你知道库的名字的话,也可以在这个网站上搜索。

据我了解,Go的第三方库大多都在GitHub上面。

#### 第六步:用Go做Web开发

Go是静态语言,而且支持并发编程,所以,他有天然的性能优势,大多公司主要使用Go也是开发后端服务(即API)。

终于到了实战阶段,如果我们真的要掌握一门语言,那么一定要用它来开发一个项目出来。这个过程大概需要一个月。

Beego是Go下在主流的Web开发框架,资料相对比较丰富,而且有完善的文档。你可为此制定一个目标,比如用它来开发一个Blog,为此,你需要详细阅读Beego文档,以及学习相关的Web开发技术。

等你完成这个项目的时候,我想你已经会使用Go语言了。

最近在做一个内网穿透工具,是用C# Dotnet Core写的。 总担心性能不行,想参考下别人写的。 结果搜到很多GO语言的例子。 看了下Go语言的介绍,觉得确实是比较简单的语言。并且在并发上比较方便。于是,就开始学习Go语言,并用Go把内网穿透工具重新写了一下。

然后,又想用Go语言重写之前的DotnetCore的WebAPI,现在还在编写中,只是对比下两个语言差异。

然后看下 C#

实际上目前我也没有能力判断GO和C#哪个更好