潍坊网站建设兼职,自己怎么做外贸英文网站,便宜网站设计,网站cms系统排名1.fmt
fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。
函数说明Print内容输出到系统的标准输出Fprintf将内容输出到一个io.Writer接口类型的变量w中Sprint把传入的数据生成并返回一个字符串Errorf根据format参数生成格式化字符…1.fmt
fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。
函数说明Print内容输出到系统的标准输出Fprintf将内容输出到一个io.Writer接口类型的变量w中Sprint把传入的数据生成并返回一个字符串Errorf根据format参数生成格式化字符串并返回一个包含该字符串的错误。
1.1 Print
Print系列函数会将内容输出到系统的标准输出区别在于Print函数直接输出内容Printf函数支持格式化输出字符串Println函数会在输出内容的结尾添加一个换行符。
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
例如
func main() {fmt.Print(在终端打印该信息。)name : 沙河小王子fmt.Printf(我是%s\n, name)fmt.Println(在终端打印单独一行显示)
} Print在终端打印该信息
在终端打印该信息。我是沙河小王子
在终端打印单独一行显示
1.2 Fprintf
Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中我们通常用这个函数往文件中写入内容。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
例子
// 向标准输出写入内容
fmt.Fprintln(os.Stdout, 向标准输出写入内容)
fileObj, err : os.OpenFile(./xx.txt, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err ! nil {fmt.Println(打开文件出错err:, err)return
}
name : 沙河小王子
// 向打开的文件句柄中写入内容
fmt.Fprintf(fileObj, 往文件中写如信息%s, name)
1.3 Sprint
Sprint系列函数会把传入的数据生成并返回一个字符串。
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string例子
s1 : fmt.Sprint(沙河小王子)
name : 沙河小王子
age : 18
s2 : fmt.Sprintf(name:%s,age:%d, name, age)
s3 : fmt.Sprintln(沙河小王子)
fmt.Println(s1, s2, s3)
1.4 Errorf
Errorf函数根据format参数生成格式化字符串并返回一个包含该字符串的错误。
func Errorf(format string, a ...interface{}) error例如
err : fmt.Errorf(这是一个错误)Go1.13版本为fmt.Errorf函数新加了一个%w占位符用来生成一个可以包裹Error的Wrapping Error。
e : errors.New(原始错误e)
w : fmt.Errorf(Wrap了一个错误%w, e) 2.格式化占位符
2.1 通用占位符
占位符说明%v值的默认格式表示%v类似%v但输出结构体时会添加字段名%#v值的Go语法表示%T打印值的类型%%百分号
示例代码如下
fmt.Printf(%v\n, 100)
fmt.Printf(%v\n, false)
o : struct{ name string }{小王子}
fmt.Printf(%v\n, o)
fmt.Printf(%#v\n, o)
fmt.Printf(%T\n, o)
fmt.Printf(100%%\n)输出结果如下
100
false
{小王子}
struct { name string }{name:小王子}
struct { name string }
100%
2.2 布尔型
占位符说明%ttrue或false
2.3 整型
占位符说明%b表示为二进制%c该值对应的unicode码值%d表示为十进制%o表示为八进制%x表示为十六进制使用a-f%X表示为十六进制使用A-F%U表示为Unicode格式U1234等价于U%04X%q该值对应的单引号括起来的go语法字符字面值必要时会采用安全的转义表示示例代码如下
n : 65
fmt.Printf(%b\n, n)
fmt.Printf(%c\n, n)
fmt.Printf(%d\n, n)
fmt.Printf(%o\n, n)
fmt.Printf(%x\n, n)
fmt.Printf(%X\n, n)输出结果如下
1000001
A
65
101
41
412.4 浮点数与复数
占位符说明%b无小数部分、二进制指数的科学计数法如-123456p-78%e科学计数法如-1234.456e78%E科学计数法如-1234.456E78%f有小数部分但无指数部分如123.456%F等价于%f%g根据实际情况采用%e或%f格式以获得更简洁、准确的输出%G根据实际情况采用%E或%F格式以获得更简洁、准确的输出示例代码如下
f : 12.34
fmt.Printf(%b\n, f)
fmt.Printf(%e\n, f)
fmt.Printf(%E\n, f)
fmt.Printf(%f\n, f)
fmt.Printf(%g\n, f)
fmt.Printf(%G\n, f)输出结果如下
6946802425218990p-49
1.234000e01
1.234000E01
12.340000
12.34
12.342.5 字符串和[]byte
占位符说明%s直接输出字符串或者[]byte%q该值对应的双引号括起来的go语法字符串字面值必要时会采用安全的转义表示%x每个字节用两字符十六进制数表示使用a-f%X每个字节用两字符十六进制数表示使用A-F示例代码如下
s : 小王子
fmt.Printf(%s\n, s)
fmt.Printf(%q\n, s)
fmt.Printf(%x\n, s)
fmt.Printf(%X\n, s)输出结果如下
小王子
小王子
e5b08fe78e8be5ad90
E5B08FE78E8BE5AD902.6 指针
占位符说明%p表示为十六进制并加上前导的0x示例代码如下
a : 10
fmt.Printf(%p\n, a)
fmt.Printf(%#p\n, a)输出结果如下
0xc000094000
c0000940002.7 宽度标识符
宽度通过一个紧跟在百分号后面的十进制数指定如果未指定宽度则表示值时除必需之外不作填充。精度通过可选的宽度后跟点号后跟的十进制数指定。如果未指定精度会使用默认精度如果点号后没有跟数字表示精度为0。举例如下
占位符说明%f默认宽度默认精度%9f宽度9默认精度%.2f默认宽度精度2%9.2f宽度9精度2%9.f宽度9精度0
示例代码如下
n : 12.34
fmt.Printf(%f\n, n)
fmt.Printf(%9f\n, n)
fmt.Printf(%.2f\n, n)
fmt.Printf(%9.2f\n, n)
fmt.Printf(%9.f\n, n)输出结果如下
12.340000
12.340000
12.3412.34122.8 其他flag
占位符说明‘’总是输出数值的正负号对%q%q会生成全部是ASCII字符的输出通过转义’ 对数值正数前加空格而负数前加负号对字符串采用%x或%X时% x或% X会给各打印的字节之间加空格‘-’在输出右边填充空白而不是默认的左边即从默认的右对齐切换为左对齐‘#’八进制数前加0%#o十六进制数前加0x%#x或0X%#X指针去掉前面的0x%#p对%q%#q对%U%#U会输出空格和单引号括起来的go字面值‘0’使用0而不是空格填充对于数值类型会把填充的0放在正负号后面
举个例子
s : 小王子
fmt.Printf(%s\n, s)
fmt.Printf(%5s\n, s)
fmt.Printf(%-5s\n, s)
fmt.Printf(%5.7s\n, s)
fmt.Printf(%-5.7s\n, s)
fmt.Printf(%5.2s\n, s)
fmt.Printf(%05s\n, s)输出结果如下
小王子小王子
小王子 小王子
小王子 小王
00小王子3.获取输入
Go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数可以在程序运行过程中从标准输入获取用户的输入。
fmt.Scan
函数定签名如下
func Scan(a ...interface{}) (n int, err error)Scan从标准输入扫描文本读取由空白符分隔的值保存到传递给本函数的参数中换行符视为空白符。本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少会返回一个错误报告原因。
具体代码示例如下
func main() {var (name stringage intmarried bool)fmt.Scan(name, age, married)fmt.Printf(扫描结果 name:%s age:%d married:%t \n, name, age, married)
}将上面的代码编译后在终端执行在终端依次输入小王子、28和false使用空格分隔。
$ ./scan_demo
小王子 28 false
扫描结果 name:小王子 age:28 married:false fmt.Scan从标准输入中扫描用户输入的数据将以空白符分隔的数据分别存入指定的参数。
fmt.Scanf
函数签名如下
func Scanf(format string, a ...interface{}) (n int, err error)Scanf从标准输入扫描文本根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。本函数返回成功扫描的数据个数和遇到的任何错误。
代码示例如下
func main() {var (name stringage intmarried bool)fmt.Scanf(1:%s 2:%d 3:%t, name, age, married)fmt.Printf(扫描结果 name:%s age:%d married:%t \n, name, age, married)
}将上面的代码编译后在终端执行在终端按照指定的格式依次输入小王子、28和false。
$ ./scan_demo
1:小王子 2:28 3:false
扫描结果 name:小王子 age:28 married:false fmt.Scanf不同于fmt.Scan简单的以空格作为输入数据的分隔符fmt.Scanf为输入数据指定了具体的输入内容格式只有按照格式输入数据才会被扫描并存入对应变量。
例如我们还是按照上个示例中以空格分隔的方式输入fmt.Scanf就不能正确扫描到输入的数据。
$ ./scan_demo
小王子 28 false
扫描结果 name: age:0 married:false fmt.Scanln
函数签名如下
func Scanln(a ...interface{}) (n int, err error)Scanln类似Scan它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。本函数返回成功扫描的数据个数和遇到的任何错误。
具体代码示例如下
func main() {var (name stringage intmarried bool)fmt.Scanln(name, age, married)fmt.Printf(扫描结果 name:%s age:%d married:%t \n, name, age, married)
}将上面的代码编译后在终端执行在终端依次输入小王子、28和false使用空格分隔。
$ ./scan_demo
小王子 28 false
扫描结果 name:小王子 age:28 married:false fmt.Scanln遇到回车就结束扫描了这个比较常用。
bufio.NewReader
有时候我们想完整获取输入的内容而输入的内容可能包含空格这种情况下可以使用bufio包来实现。示例代码如下
func bufioDemo() {reader : bufio.NewReader(os.Stdin) // 从标准输入生成读对象fmt.Print(请输入内容)text, _ : reader.ReadString(\n) // 读到换行text strings.TrimSpace(text)fmt.Printf(%#v\n, text)
}Fscan系列
这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)Sscan系列
这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)