Golang编程:格式化输出与输入转义字符技巧
发表时间: 2022-12-21 08:12
输出到控制台:fmt.Print、fmt.Println、fmt.Printf
输出到输出流:fmt.Fprint、fmt.Fprintln、fmt.Fprintf
输出给变量:fmt.Sprint、fmt.Sprintln、fmt.Sprintf
案例
package mainimport ( "fmt" "os")func main() { // 输出到控制台 fmt.Print("无上甚深微妙法", " ", "百千万劫难遭遇", " ") // 不换行 fmt.Println("我今见闻得受持", "愿解如来真实义") // 换行 fmt.Printf("%s,%s,%s,%s。\n", "如来者", "无所从来", "亦无所去", "故名如来") fmt.Printf("%d %4.3f %t %% %T\n", 1949, 3.1415, true, 1949) // 输出到输出流 writer := os.Stdout fmt.Fprint(writer, "无上甚深微妙法", " ", "百千万劫难遭遇", " ") fmt.Fprintln(writer, "我今见闻得受持", "愿解如来真实义") fmt.Fprintf(writer, "%s,%s,%s,%s。\n", "如来者", "无所从来", "亦无所去", "故名如来") fmt.Fprintf(writer, "%d %4.3f %t %% %T\n", 1949, 3.1415, true, 1949) // 输出给变量 str1 := fmt.Sprint("无上甚深微妙法", " ", "百千万劫难遭遇", " ") str2 := fmt.Sprintln("我今见闻得受持", "愿解如来真实义") str3 := fmt.Sprintf("%s,%s,%s,%s。\n", "如来者", "无所从来", "亦无所去", "故名如来") str4 := fmt.Sprintf("%d %4.3f %t %% %T\n", 1949, 3.1415, true, 1949) // 输出 fmt.Print(str1, str2, str3, str4) fmt.Printf("%T,%T,%T,%T\n", str1, str2, str3, str4)}
fmt.Scanln、fmt.Scanf
案例
package mainimport "fmt"func main() { // 控制台输入 var name string var age int fmt.Println("请输入您的名字和年龄:") fmt.Scanln(&name, &age) fmt.Println("您输入的名字和年龄为:", name, age) // 结论: 一次性输入,空格分割:如: 岳飞 34 // 控制台输入 fmt.Println("再次输入您的名字和年龄:") fmt.Scanf("%s\n%s", &name, &age) fmt.Println("您输入的名字和年龄为:", name, age) // 结论, 一个一个的输入,中间回车(\n)隔开}
案例
package mainimport "fmt"func main() { num := 1949 // %d表示十进制整数 fmt.Printf("%d\n", num) // %x,%X,大小写的方式显示十六进制整数 fmt.Printf("%x\n", num) fmt.Printf("%X\n", num) // %o表示八进制的整数 fmt.Printf("%o\n", num) // %b表示二进制的整数 fmt.Printf("%b\n", num) // %p内存地址 fmt.Printf("%p\n", &num) // 浮点数 fmt.Printf("%f %3.2f %g %e\n", 3.1415, 3.1415, 3.1415, 3.1415) // 字符 fmt.Printf("%c\n", 97) // 类型 fmt.Printf("%T\n", true) fmt.Printf("%T\n", "true") // 内置格式(go是什么就输出什么) fmt.Printf("%v\n", "如来者") // 带双引号的字符串 fmt.Printf("%q\n", "1938年") // \n \t fmt.Printf("无所从来\t亦无所去\t \n")}
案例
import "fmt"func main() { // 数字转字符串 num1 := 1949 str1 := fmt.Sprintf("%d", num1) fmt.Printf("%s %T\n", str1, str1) // 10进制转16进制字符串 num2 := 17 str2 := fmt.Sprintf("%x", num2) fmt.Printf("%s %T\n", str2, str2)}
格式化占位符
通用占位符 %v 值的默认格式表示%+v 类似%v,但输出结构体时会添加字段名%#v 值的Go语法表示%T 打印值的类型%% 百分号布尔型 %t true或false整型 %b 表示为二进制%c 该值对应的unicode码值(ASCII码)%d 表示为十进制%o 表示为八进制%x 表示为十六进制,使用a-f%X 表示为十六进制,使用A-F%U 表示为Unicode格式:U+1234,等价于”U+%04X”%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示浮点数与复数 %b 无小数部分、二进制指数的科学计数法,如-123456p-78%e 科学计数法,如-1234.456e+78%E 科学计数法,如-1234.456E+78%f 有小数部分但无指数部分,如123.456%F 等价于%f%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)字符串和[]byte %s 直接输出字符串或者[]byte%q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示%x 每个字节用两字符十六进制数表示(使用a-f)%X 每个字节用两字符十六进制数表示(使用A-F)指针 %p 表示为十六进制,并加上前导的0x%#p 表示为十六进制,没有前导的0x宽度标识符 %f 默认宽度,默认精度%9f 宽度9,默认精度%.2f 默认宽度,精度2%9.2f 宽度9,精度2%9.f 宽度9,精度0其他flag + 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义);空格 对数值,正数前加空格而负数前加负号;对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格- 在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐);# 八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p)对%q(%#q),对%U(%#U)会输出空格和单引号括起来的go字面值;