软件包 fmt 使用类似于 C 的 printf 和 scanf 的函数实现格式化的 I/O。
go版本每年更新两次
fmt 向外输出
Print系列函数
/*
Print系列
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)
Print系列函数会将内容输出到系统的标准输出
Print 函数直接输出内容
Printf 函数支持格式化输出字符串
Println 函数会在输出内容的结尾添加一个换行符
*/
func main() {
s := "wwq"
fmt.Printf("我是%v", s)
fmt.Print("为什么\n")
fmt.Println("为什么")
}
Fprint系列函数
/*
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)
*/
func main() {
fmt.Fprintln(os.Stdout, "输出hello") //输出写入内容
f, err := os.OpenFile("D:\\test.txt",
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("打开文件出错,err:", err)
return
}
// 向打开的文件句柄中写入内容
fmt.Fprint(f, "往文件中写hello")
}
Sprint系列函数
/*
Sprint系列函数会把传入的数据生成并返回一个字符串
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
*/
func main() {
name := "张三"
s := fmt.Sprintf("我是%v", name)
fmt.Println(s)
}
Errorf函数
func main() {
err := fmt.Errorf("错误")
if err != nil {
fmt.Println(err)
}
}
fmt 获取输入
Scan系列
/*
Go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。
func Scan(a ...interface{}) (n int, err error)
Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
*/
func main() {
var s string
var s1 string
fmt.Scan(&s, &s1)
fmt.Printf("扫描结果%v %v\n", s, s1)
}
/*
func Scanf(format string, a ...interface{}) (n int, err error)
Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
本函数返回成功扫描的数据个数和遇到的任何错误
*/
func main() {
var s string
var s1 string
fmt.Scanf("1:%v 2:%v", &s, &s1)
fmt.Printf("扫描结果%v %v\n", s, s1)
}
/*
func Scanln(a ...interface{}) (n int, err error)
Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
本函数返回成功扫描的数据个数和遇到的任何错误。
*/
func main() {
var s string
var s1 string
fmt.Scanln(&s, &s1)
fmt.Printf("扫描结果%v %v\n", s, s1)
}
bufio.NewReader()
/*
bufio.NewReader()
有时候我们想完整获取输入的内容,而输入的内容可能包含空格,这种情况下可以使用bufio包来实现。
*/
func main() {
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)
*/
func main() {
f, _ := os.Open("D:\\test.txt")
var s string
fmt.Fscan(f, &s)
fmt.Printf("扫描结果%v\n", s)
}
Sscan系列
/*
Sscan系列
这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中
读取数据而是从指定字符串中读取数据
*/
func main() {
var s string
fmt.Sscan("张三", &s)
fmt.Println(s)
}