在 Go 语言中,字符串的实质就是字节切片,我们也很容易将 string 类型转换成 []byte(vice-versa),记住这一点之后我们再继续往下。
首先用一个简单的字符串的问题开始,这是 exercism.io 上的第二道题,题目非常简单:给定一个函数:func ShareWith(name string) string,输入一个字符串,输出一个字符串,如果输入的 name 为 Alice,则输出“One for Alice, one for me.”,如果输入得字符串为空,那么输出“One for you, one for me.”,
这道题非常简单吧,其实就是一个字符串的拼接问题,当然还有一个字符串的比较。首先说一下这道题的思路(这么简单的题也要思路?要!天下难事必作于易,天下大事必作于细。=..=):首先输入的参数变量名字为 name ,那么第一步就要判断 name 是不是为空,如果为空,那么输出 “One for you, one for me.”,如果不为空,将 “you” 替换成输入的数据。还有一种思路就是先判断 name 是否为空,如果为空,将 name 赋值为 “you”,然后统一将 name 变量的值拼接成结果字符串,然后返回。这两种思路区别不大,这里说一个题外话,虽然说这两种思路差别不大,但是却能看出来一个人编程的时间有多长,第一种思路的人,基本上都是新手或者编程时间不太长,第二种的对于编程来说应该已经很熟悉了(这不能代表所有人,当然这只是我个人的想法,不喜勿喷=..=),好了,咱们接着说题外话,我为什么说这两种思路有差距呢?其实这里和面向对象编程有一点点类似,第一种思路,面对的是结果,也就是说,看到了这个函数的功能,就想着输出正确的结果,当然这也符合人类的思路。但是第二种对于编程来说,就成熟许多了,首先我们看到这个函数的功能,并没有急着返回正确的结果,而是思考了里面的实现方式,将程序逻辑进行了整理,然后返回结果。所以我更倾向于
第二种,话说回来,基本上编程的人都会是第二种思路的,题外话结束!
对了,附上两种思路的基本代码:
第二种思路:
接下来怎么说一下,这道题大致上有这几种思路: