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字面值;