在fmt包中针对打印的方法有很多中,输入的方法也有很多种。我们先学习一下它们的使用方法,只有先知道如何使用,才能知道区别。在后期的学习过程中,我们才会知道根据需求使用不同的方法。
fmt输出
fmt.Print()
第一个fmt.Print(),在打印的时候fmt.Print()不支持换行,如果我们想打印多次需要自己添加"\n"参数,来代替换行符。先看下面的例子:
package main import "fmt" //个人技术博客http://www.wulaoer.org func main() { fmt.Print("Hello") fmt.Print("Word") }
打印结果:
HelloWord
上面打印的结果把两个字符都合并一起了,如果我想分开打印,就需要使用换行符"\n",下面看一下加换行符"\n"之后的打印结果:
package main import "fmt" //个人技术博客http://www.wulaoer.org func main() { fmt.Print("Hello","\n") fmt.Print("Word") }
打印结果:
Hello Word
这里注意,换行符"\n"必须是双引号,如果单引号会打印出byte类型或rune类型,只有双引号才会是字符串或者字符数组,如果换成反引号(Esc下面的那个键)表示字符串的字面量,你定义时是什么样,打印出来是什么样,支持换行、转义符。看下面的例子:
package main import "fmt" //个人技术博客http://www.wulaoer.org func main() { fmt.Print("双引号字符:","w", "\n") //Print原本不带换行符 fmt.Print("单引号字符:",'w', "\n") fmt.Print("双引号字符加整数:","w", "1", "\n") fmt.Print("单引号字符加整数:",'w', '1', "\n") fmt.Print("不加引号打印整数:",27, "\n") fmt.Print("不加引号打印整数:",'w', 11, "\n") fmt.Print("反引号",`wulaoer`,`wolf`) }
打印结果:
双引号字符:w 单引号字符:119 双引号字符加整数:w1 单引号字符加整数:119 49 不加引号打印整数:27 不加引号打印整数:119 11 反引号wulaoerwolf
注意fmt.Print()不支持字符串格式化,不支持自动换行,支持单引号,双引号,反引号操作。在单引号中的byte类型只能是一位,可以理解为字母,多个字母就是字符了。
fmt.Println()
fmt.Println()支持自动换行,一行一个fmt.Println()语句。和看fmt.Print()一样,也支持双引号,单引号,反引号等。看下面的例子:
package main import "fmt" //个人技术博客http://www.wulaoer.org func main() { fmt.Println("双引号字符:","w") fmt.Println("单引号字符:",'w') fmt.Println("双引号字符加整数:","w","1") fmt.Println("单引号字符加整数:",'w', 'l') fmt.Println("不加引号打印整数:",27) fmt.Println("不加引号打印整数:",27, 11) fmt.Println("使用换行符打印整数:","\n", 27, 11) }
打印结果:
双引号字符: w 单引号字符: 119 双引号字符加整数: w 1 单引号字符加整数: 119 108 不加引号打印整数: 27 不加引号打印整数: 27 11 使用换行符打印整数: 27 11
fmt.Println()支持自动换行,但是不支持字符串格式化。在Golang中,打印方法是分开的,不像python那样一个print()即支持换行也支持字符格式化。
fmt.Printf()
fmt.Printf()是支持字符格式化的,但是fmt.Printf()不支持换行和fmt.Print()一样,两者的区别就是字符格式化,看下面的例子:
package main import "fmt" //个人技术博客http://www.wulaoer.org //定义的全局变量 const ( wulaoer string = "\nmain {\nconsole.log(event)\nreturn ret\n};\n" wolf string = ` main { console.log(event) }; ` ) const ( name string = "wulaoer" ) func main() { fmt.Printf("Hi my name is %s \n",name) fmt.Printf("wulaoer:%v\n", wulaoer[1]) fmt.Printf("wolf:%s\n",wolf) }
打印结果:
Hi my name is wulaoer wulaoer:109 wolf: main { console.log(event) };
我们先测试了前面的反引号,后面又根据字符格式化,使用了参数"%s"打印字符串,"%v"打印变量的值。
下面看看fmt.Printf()格式化的参数:
%v:以默认的方式打印变量的值 %T:打印变量的输出类型
整数
%d:格式化输出整数,%+d表示带符号的整型,fmt.Printf("%+d", 255)输出+255 %b:格式化输出整数的二进制 %x:格式化输出十六进制,使用小写的x是输出的小写,大写的输出大写 %q:打印双引号 %o:不带零的八进制,%#o表示带零的八进制 %x:小写的十六进制,%X表示大写的十六进制,%#x表示带0x的十六进制 %U:打印Unicode字符,%#U表示打印带字符的Unicode
浮点数
%f:格式化输出浮点数 %e:科学计数法e,%E和%e的区别不大
整数宽度
|%6d|%6d|:整数的最小宽度为6,如果更宽则扩大。右对齐|%-6d|%-6d|,不够用0补充。 |%6.2f|%6.2f|:浮点数的最小宽度为6.2,如果更宽则扩大
根据上面的参数,这里把所有参数的例子都写出来了,看下面的例子:
package main import ( "fmt" //"os" ) //个人技术博客http://www.wulaoer.org type wulaoer struct { x, y int } func main() { p := wulaoer{27,11} fmt.Printf("打印值的结构体:%v\n", p) fmt.Printf("格式化输出结构体的字段名: %+v\n", p) fmt.Printf("输出值的go语法表示: %#v\n", p) fmt.Printf("输出值的类型: %T\n", p) fmt.Printf("格式化布尔值: %t\n",true) fmt.Printf("格式化整数,十进制格式化:%+d\n",277) fmt.Printf("格式化整数,二进制格式化:%b\n",27) fmt.Printf("输出整数对应的字符: %c\n",119) fmt.Printf("不带0的八进制:%o\n",22) fmt.Printf("带0的八进制:%#o\n",22) fmt.Printf("输出整数,十六进制格式化大写: %X\n",27) fmt.Printf("输出整数,带0x的十六进制: %#X\n",27) fmt.Printf("输出整数,十六进制格式化小写: %x\n",27) fmt.Printf("格式化浮点数,十进制格式化: %f\n",3.1415926) fmt.Printf("格式化浮点数,科学记数法: %e\n",234523452345.0) fmt.Printf("格式化浮点数,科学记数法: %E\n",234523452345.0) fmt.Printf("浮点数,所需的最小位数:%g\n",11111.2722222222) fmt.Printf("输出字符串: %s\n","www.wulwoer.org") fmt.Printf("给输出的字符串加双引号: %q\n","www.wulaoer.org") fmt.Printf("使用base-16编码输出字符串: %x\n","wulaoer.org") fmt.Printf("输出一个指针的值: %p\n",&p) fmt.Printf("整数的最小宽度为6,如果更宽则扩大: |%6d|%6d|\n",999999999999999999,22) fmt.Printf("浮点数的最小宽度为6.2,如果更宽则扩大: |%6.2f|%6.2f|\n", 1.2, 3.45) fmt.Printf("字符串的最小宽度为6.2,如果更宽则扩大: |%6s|%6s|\n", "foo", "b") fmt.Printf("字符串的最小宽度为6.2,如果更宽则扩大左对齐: |%-6s|%-6s|\n", "foo", "b") fmt.Printf("字符串的最小宽度为6.2,如果更宽则扩大,右对齐,用0填充: |%06s|%06s|\n", "foo", "b") val := 1234567 fmt.Printf("从右边往左截取:%5d\n",val%1000) fmt.Printf("从右边往左截取,左对齐:%-5d\n",val%100) fmt.Printf("打印Unicode字符: %U\n",2) fmt.Printf("打印带字符的Unicode: %#U",3) }
打印结果:
打印值的结构体:{27 11} 格式化输出结构体的字段名: {x:27 y:11} 输出值的go语法表示: main.wulaoer{x:27, y:11} 输出值的类型: main.wulaoer 格式化布尔值: true 格式化整数,十进制格式化:+277 格式化整数,二进制格式化:11011 输出整数对应的字符: w 不带0的八进制:26 带0的八进制:026 输出整数,十六进制格式化大写: 1B 输出整数,带0x的十六进制: 0X1B 输出整数,十六进制格式化小写: 1b 格式化浮点数,十进制格式化: 3.141593 格式化浮点数,科学记数法: 2.345235e+11 格式化浮点数,科学记数法: 2.345235E+11 浮点数,所需的最小位数:11111.2722222222 输出字符串: www.wulwoer.org 给输出的字符串加双引号: "www.wulaoer.org" 使用base-16编码输出字符串: 77756c616f65722e6f7267 输出一个指针的值: 0xc000116060 整数的最小宽度为6,如果更宽则扩大: |999999999999999999| 22| 浮点数的最小宽度为6.2,如果更宽则扩大: | 1.20| 3.45| 字符串的最小宽度为6.2,如果更宽则扩大: | foo| b| 字符串的最小宽度为6.2,如果更宽则扩大左对齐: |foo |b | 字符串的最小宽度为6.2,如果更宽则扩大,右对齐,用0填充: |000foo|00000b| 从右边往左截取: 567 从右边往左截取,左对齐:67 打印Unicode字符: U+0002 打印带字符的Unicode: U+0003
以上是针对fmt.Printf()的所有用法,可能有些用法没有写到,后期发现及时补充。也可以不使用fmt包直接使用print,println打印,看下面的例子:
package main //个人技术博客http://www.wulaoer.org func main() { print("this is learn www.wulaoer.org\n") println("Golang python3") }
输出结果:
this is learn www.wulaoer.org Golang python3
这是针对Golang中变量的输出,以及字符串的输出格式化方法,下面看输出方法:
fmt输入
Golang的输入有很多种方法,有的是获取终端的输入,有的是把输入的值赋值给变量,然后打印变量。先看第一种方法:
package main //个人技术博客http://www.wulaoer.org import "fmt" func main() { var name string var age int fmt.Println("输入名字:") fmt.Scanln(&name) fmt.Println("输入年龄:") fmt.Scan(&age) fmt.Printf("我的名字叫 %s,今年%d岁",name,age) }
输出结果:
输入名字: wolf 输入年龄: 18 我的名字叫 wolf,今年18岁
这里使用Scanln和Scan是一样的,程序停止执行等待用户输入。下面看赋值给变量
package main //个人技术博客http://www.wulaoer.org import ( "bufio" "fmt" "os" ) func main() { reader := bufio.NewReader(os.Stdin) result ,err := reader.ReadString('\n') if err != nil { fmt.Println("read error",err) } fmt.Println("you name :",result) fmt.Println("------------------------------------") var buffer [4096]byte n, errs := os.Stdin.Read(buffer[:]) if errs != nil { fmt.Println("read error",errs) } fmt.Println("count:",n,"msg:",string(buffer[:])) }
输出结果:
hello word you name : hello word ------------------------------------ www.wulaoer.org count: 16 msg: www.wulaoer.org
两者的区别是针对输入的字符,上面的方法在字符串中不能有空格,返回的字符串只能返回空格前的字符,后面的字符不返回。这里返回了所有的字符,不需要什么直接返回结果。不输入直接回车也不会报错,没有对输入的一个判断,而且输入的可以是任何类型。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏