go语言中fmt包的基本用法 原文参考:https://www.liwenzhou.com/posts/Go/go_fmt/
fmt.print
func main() {
fmt.Print("在终端打印信息")
name := "沙河小王子"
fmt.Printf("我是%s\n", name)
fmt.Println("在终端打印一条显示")
fmt.Println(name) //直接打印变量内容
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_main_go__1_.exe #gosetup
在终端打印信息我是沙河小王子
在终端打印一条显示
沙河小王子
Fprint
func main() {
//fprint
//向标准输出写入内容
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)
//注意只要满足io.writer的接口类型都支持写入
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_main_go__1_.exe #gosetup
向标准输出写入此内容
Sprint
func main() {
//Sprint系列函数会吧传入的数据生成并返回一个字符串这里的S 貌似就是String的首字母
s1 := fmt.Sprint("沙河小王子\n")
name := "沙河小王子"
age := 18
s2 := fmt.Sprintf("name: %s, age %d\n", name, age)
s3 := fmt.Sprintln("沙河小王子")
fmt.Println(s1, s2, s3)
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_main_go__1_.exe #gosetup
沙河小王子
name: 沙河小王子, age 18
沙河小王子
*printf带有占位符的打印
//格式化占位符
//*printf结尾的方法都支持format格式化参数,这里我们按照占位符将被替换的变量类型进行划分,方便查询和记忆.
func main() {
fmt.Printf("%v\n", 100) //打印int类型
fmt.Printf("%v\n", false) //打印bool类型
o := struct {
name string
}{"小孙子"}
fmt.Printf("%v\n", o) //打印struct类型
fmt.Printf("%#v\n", o) //标准化打印输出struct类型
fmt.Printf("%T\n", o) //打印类型
fmt.Printf("100%%\n") //打印百分数
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_main_go__1_.exe #gosetup
100
false
{小孙子}
struct { name string }{name:"小孙子"}
struct { name string }
100%
整型
占位符 | 说明 |
%b | 表示为二进制 |
%c | 该值对应的unicode码值 |
%d | 表示为十进制 |
%o | 表示为八进制 |
%x | 表示为十六进制,使用a-f |
%X | 表示为十六进制,使用A-F |
%U | 表示为Unicode格式:U+1234,等价于”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
41
字符串和[]byte
占位符 | 说明 |
%s | 直接输出字符串或者[]byte |
%q | 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示 |
%x | 每个字节用两字符十六进制数表示(使用a-f |
%X | 每个字节用两字符十六进制数表示(使用A-F) |
获取输入
fmt.Scan
func main() {
var (
name string
age int
married bool
)
fmt.Scan(&name, &age, &married) //这里接受三个值,分别以空格进行分隔.
fmt.Printf("扫描结果:name : %v,age %v,married :%v", name, age, married) //这里打印接受的三个值.
}
输出结果
D:\Go\Go\src\code.oldboy.com\studygolang\05lesson5\xueshengguanlixit>xueshengguanlixit.exe
xiaowangzi 18 false
扫描结果:name : xiaowangzi,age 18,married :false
fmt.Scanf
func main() {
var (
name string
age int
married bool
)
fmt.Scanf("1,%s 2,%d 3,%t", &name, &age, &married) //这里预留了三个占位符,
fmt.Printf("扫描结果:name : %s,age %d,married :%t", name, age, married) //这里打印接受的三个值.
}
输出结果
D:\Go\Go\src\code.oldboy.com\studygolang\05lesson5\xueshengguanlixit>xueshengguanlixit.exe
1,xiaohuozi 2,22 3,true
扫描结果:name : xiaohuozi,age 22,married :true
这里说明一下
在使用Scanf的时候接受终端输入的格式要与终端中输入的格式一样才可以.要不然是无法接收到输入值的.
Scanln
//获取输入
func main() {
var (
name string
age int
married bool
)
fmt.Scanln(&name, &age, &married) //这里输入接收值,遇到回车就进行结束接受扫描操作.
fmt.Printf("扫描结果:name : %s,age %d,married :%t", name, age, married) //这里打印接受的三个值.
}
输出结果
D:\Go\Go\src\code.oldboy.com\studygolang\05lesson5\xueshengguanlixit>xueshengguanlixit.exe
xiaolaodi 22 true
扫描结果:name : xiaolaodi,age 22,married :true
说明一下:
这里使用空格进行分隔,连续接受三个值.遇到换行符就终止
D:\Go\Go\src\code.oldboy.com\studygolang\05lesson5\xueshengguanlixit>xueshengguanlixit.exe
xiaolaodi
扫描结果:name : xiaolaodi,age 0,married :false
这里只输入了一个值,然后使用回车后就直接将一个值传入到代码中了,其余的是默认类型的零值.
bufio.Newreader
//使用bufil.NewReader
func main() {
reader := bufio.NewReader(os.Stdin) //从标准输入生成读对象
fmt.Print("请输入内容:") //这里使用print不换行
text, _ := reader.ReadString('\n') //这里表示读到换行符
text = strings.TrimSpace(text) //去掉前后空格
fmt.Printf("%#v\n", text) //打印输入内容
}
输出结果
D:\Go\Go\src\code.oldboy.com\studygolang\05lesson5\xueshengguanlixit>xueshengguanlixit.exe
请输入内容:asd asd fkash aksjdh kaakjl kjadfhlkasdfjlk
"asd asd fkash aksjdh kaakjl kjadfhlkasdfjlk"