本文使用Go来实现字符串逆序这个功能,用最简单的话术让你理解
附带在Go中debug的小技巧
例如:Hello 转换为 olleH
一、实现字符串的逆序
在go中,字符串要根据索引获取值是需要转为字节的。接下来我们看一个实现代码
代码应该都看的明白,下面咔咔用图解来帮助解释一下
package main import ( "fmt" ) func stringReverse() { var str = "Hello" // 字符串转字节 var bytes []byte = []byte(str) for i := 0; i < len(str)/2; i++ { // 定义一个变量存放从后往前的值 tmp := bytes[len(str)-i-1] // 从后往前的值跟从前往后的值调换 bytes[len(str)-i-1] = bytes[i] // 从前往后的值跟从后往前的值进行调换 bytes[i] = tmp } str = string(bytes) fmt.Println(str) }
这段代码可以看到循环的最大次数就是将字符串的长度除了2
在这副图中我们可以看到第一次循环时是将第一字符串跟最后一个字符串进行调换
第二次循环时将第二个值跟倒数第二值进行调换
这就是这块代码的意义所在
先将索引最后的字符串的值拿出来
接着让最后索引的字符串跟第一个索引字符串相等 也就是上图中第一个步骤 让最后一个值跟等于第一个值
然后把第一个索引的字符串改为我们第一步保存的值 同理 让第一个值等于最后一个值
在go中还有好几种实现这个过程,这里咔咔在提供一种供大家参考
这种方式需要引入包strings,也是官方推荐的一种方式
func stringReverse1() { var str = "hello" var bytes []byte = []byte(str) var build strings.Builder for i := 0; i < len(bytes); i++ { i2 := bytes[len(bytes)-i-1] build.WriteString(string(i2)) } s3 := build.String() fmt.Println(s3) }
执行俩个代码,检测是否可行
二、给你一个小技巧让你在用Go的Debug时游刃有余
假设我们想调试一下这几个值的时候,就会发现go会直接报出一个变量没有使用的错误。这种写法在PHP中是不存在报错的,这个错误就会导致go的程序编译无法通过
那么我们应该如何模拟已经使用了这个值呢!
可以使用一个底杠来解决这个问题
这时就可以使用debug来调试了我们想要得值了