Skip to main content

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)))
}