escape sequence
转义字符
在编程中有一些字符是打不出来的,比如换行,提示音,下一个制表位等等,于是程序语言的开发者就设计了转义序列(escape sequence)这种东西用来表达这些字符。
所谓转义,可以理解为 “采用某些方式暂时取消该字符本来的含义”,这里的 “某种方式” 指的就是在指定字符前添加反斜杠 \
,以此来表示对该字符进行转义。
或者更简洁点:将后面的字母表示为特殊含义
常见的转义字符
转义符 | 含义 |
---|---|
\b | 退格(backspace) |
\n | 换行 |
\r | 回车 |
\t | 制表符(tab 8位) |
\” | 双引号 |
\’ | 单引号 |
\\ | 反斜杠 |
代码测试
Example 1
package main
import (
"fmt"
)
func main() {
//练习转义字符
//\n换行
fmt.Println("aaa\nbbb")
//\b退格
fmt.Println("aaa\bbbb")
//\r光标回到本行的开头 后续输入会替换原有的字符
fmt.Println("aaaaa\rbbb")
fmt.Println("-------------")
//\t 制表符
fmt.Println("aaa\tbbb")
fmt.Println("aaaaaa\tbbb")
fmt.Println("aaaaaaaa\tbbb")
fmt.Println("aaaaaaaaa\tbbb")
fmt.Println("-------------")
//\" 双引号
fmt.Println("aaa\"bbb")
fmt.Println("aaa\"bbb\"")
fmt.Println("aaa\\bbb")
}
运行
Example 2: 模拟npm终端下载
package main
import (
"fmt"
"math/rand"
"strings"
"time"
)
var infos = []string{
"node_modules/path-is-absolute",
"node_modules/path-parse",
"node_modules/path-is-absolute",
"node_modules/path-to-regexp",
"node_modules/rc",
"node_modules/rc/node_modules/strip-json-comments",
"node_modules/react",
}
func main() {
rand.Seed(time.Now().Unix())
fmt.Printf("downloading ")
for _, info := range infos {
/* code */
printInfo(info)
}
fmt.Printf("%s", strings.Repeat("\b", len("downloading ")))
}
func printInfo(info string) {
n := rand.Intn(5)
fmt.Printf(info)
time.Sleep(time.Millisecond * time.Duration(200*n))
fmt.Printf("%s", strings.Repeat("\b", len(info)))
}