本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。
string
string的常用函数,其中的Replace()表达给我印象比较深刻,n为-1表示全部替换
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
//第三个参数表示替换个数,<0时表示全部替换
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
}
strconv
- Atoi()在这里指的不是ASCII对应字符转int,而是字符串转int(参见官方文档)
- ParseInt()之类的第二个参数base,如果为0,就是视情况而定。比如原来的字符串是0b,转换为二进制;0或0o八进制,0x16进制。
guess-game
看了几遍guess-game,并且凭着记忆仿写了一段代码,在这个过程中对一些注意事项的记忆更深了。
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNUm := 100
rand.Seed(time.Now().UnixNano())
secretNum := rand.Intn(maxNUm)
fmt.Println("please input your guess:")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
//有错误
if err != nil {
fmt.Println("error,please try again:")
continue
}
input = strings.Trim(input, "\r\n")
guessNum, err := strconv.Atoi(input)
if err != nil {
fmt.Println("not an Integer,,please try again:")
continue
}
fmt.Println("your guess is", guessNum)
if secretNum == guessNum {
fmt.Println("Congratulations!")
break
} else if secretNum > guessNum {
fmt.Println("The actual value is bigger!")
} else {
fmt.Println("The actual value is smaller!")
}
}
}
- go没有while语句,想用while的格式可直接用for{}代替。
- go中的if、else if else要紧密连接在{}周围,同时不要在if后面加括号
- 语法体验上感觉go像C++和Python的结合体。一些对底层的操控和把握的严谨认真程度像C++,一些力求简洁、易读的表达上像Python。
proxy代理相关的代码我还没怎么看懂,先去补补这块的基础知识,之后再来回顾。