文档章节

Go笔记-print

漂泊尘埃
 漂泊尘埃
发布于 2017/02/28 16:42
字数 1344
阅读 4
收藏 0
点赞 0
评论 0

打印输出

对每个Printf,Fprintf和Sprintf,都有另外一对相应的函数,例如Print和Println。这些函数不接受格式串,而是为每个参数生成一个缺省的格式。Println版本还会在参数之间插入一个空格,并添加一个换行,而Print版本只有当两边的操作数都不是字符串的时候才增加一个空格。

fmt.Println("hello", 23)
fmt.Print("hello", "chen", "\n")
fmt.Print("hello", 23, "\n")
fmt.Print(12, 23, "\n")

打印: hello 23 hellochen hello23 12 23

格式化打印函数fmt.Fprint等,接受的第一个参数为任何一个实现了io.Writer接口的对象;变量os.Stdout和os.Stderr是常见的实例

  fmt.Fprint(os.Stdout, "hello")
  fmt.Fprint(os.Stderr, "chen")

复用参数

  o := 0666
  fmt.Printf("%d %[1]o %#[1]o\n", o) // 438 666 0666
  x := int64(0xdeadbeef)
  fmt.Printf("%d %[1]x %#[1]x %#[1]X\n", x) // 3735928559 deadbeef 0xdeadbeef 0XDEADBEEF

%之后的[1]副词告诉Printf函数再次使用第一个操作数

%后的#副词告诉Printf在用%o、%x或%X输出时生成0、0x或0X前缀

字符串 %s

字符串前加空格

  fmt.Printf("|%10s|\n", "hello")

输出:

|     hello|

字符串后加空格

  fmt.Printf("|%-10s|\n", "hello")

数字前有个 '-',输出:

|hello     |

字符 %c

  var str string = "chen"
  ch := str[0]
  fmt.Printf("str = %s, ch = %c \n", str, ch)

整型 %d

  var i int32 = 123
  fmt.Printf("integer = %d \n", i)

在数字前用0填充

  fmt.Printf("%011d\n", 1234) // 00000001234

十六进制整型 %x,%X

%x用于字符串,字节数组和字节切片,以及整数,生成一个长的十六进制字符串,并且如果在格式中有一个空格(% x),其将会在字节中插入空格。

用于整型:

  var v uint64 = 1<<64 - 1
  fmt.Printf("%d %x %X\n", v, v, v)

18446744073709551615 ffffffffffffffff FFFFFFFFFFFFFFFF

用于字符串:

  var v string = "hello"
  fmt.Printf("%x %X\n", v, v) // 68656c6c6f 68656C6C6F

用于字符数组:

  v := []string{"ab", "cd"}
  fmt.Printf("%x %X\n", v, v) // [6162 6364] [6162 6364]

用于字符切片:

  v := []string{"ab", "cd", "辰"}
  slice := v[:]
  fmt.Printf("%X\n", slice) // [6162 6364 E8BEB0]

用于整数:

  fmt.Printf("%X\n", 97) // 61

加空格:

  fmt.Printf("% X\n", "hello") // 68 65 6C 6C 6F
  fmt.Printf("% X\n", []string{"ab", "cd"}) // [61 62 63 64]

浮点型 %f,%g

	var v1 float32 = 4.3
	var v2 float64 = 5.6
	fmt.Printf("%f %f\n", v1, v2) // 4.300000 5.600000
	fmt.Printf("%g %g\n", v1, v2) // 4.3 5.6

控制输出的精度(四舍五入):

    fmt.Printf("%.2f", 3.1482) // 3.15

输出变量类型

	i := 3
	fmt.Printf("%T", i) // int

	const pi = 3.14
	fmt.Printf("%t", pi) // %!t(float64=3.14)

输出值 %v(value),%+v,%#v

产生Print和Println的结果。

	i := []int{1, 2}
	fmt.Printf("%v", i) // [1 2]
	j := 3.4
	fmt.Printf("%v", j) // 3.4

	i := []int{1, 2}
	fmt.Printf("%#v", i) // []int{1,2}
	j := 3.4
	fmt.Printf("%#v", j) // 3.4

当打印一个结构体时,带修饰的格式%+v会将结构体的域使用它们的名字进行注解,对于任意的值,格式%#v会按照完整的Go语法打印出该值。

	type T struct {
		a int
		b float64
		c string
	}
	t := &T{7, 6.4, "abc\tdef"}
	fmt.Printf("%v\n", t)
	fmt.Printf("%+v\n", t)
	fmt.Printf("%#v\n", t)

输出:

  &{7 6.4 abc	def}
  &{a:7 b:6.4 c:abc	def}
  &main.T{a:7, b:6.4, c:"abc\tdef"}

前面的&表示是指针。

输出指针%p

	i := 3
	fmt.Printf("%d的地址是%p", i, &i) // 3的地址是0x10328000

带有引号的字符串 %q(quotation),%#q

通过%q来实现带引号的字符串格式,用于类型为string或[]byte的值。格式%#q将尽可能的使用反引号(嵌套的引号使用不同的单双引号)。(格式%q还用于整数和符文,产生一个带单引号的符文常量。)

	str := []string{"abc\"hello,'chen'.\"",
		"abc'hello,\"chen\".'",
		"abc\"hello,\"chen\".\""}
	for _, s := range str {
		fmt.Printf("%q %#q\n", s, s)
	}

输出:

"abc\"hello,'chen'.\"" `abc"hello,'chen'."`
"abc'hello,\"chen\".'" `abc'hello,"chen".'`
"abc\"hello,\"chen\".\"" `abc"hello,"chen"."`

用于整型时将转换成字符:

	c := 97
	fmt.Printf("%q %#q\n", c, c) // 'a' 'a'

字符串中有\t:

	v := "hello\tchen"
	fmt.Printf("%q %#q\n", v, v) // "hello\tchen" `hello	chen`

Println输出多行文本

	fmt.Println(`
		Enter following commands to control the player:
		lib list -- View the existing music lib
		lib add <name><artist><source><type> -- Add a music to the music lib
		lib remove <name> -- Remove the specified music from the lib
		play <name> -- Play the specified music
	`)

输出:


		Enter following commands to control the player:
		lib list -- View the existing music lib
		lib add <name><artist><source><type> -- Add a music to the music lib
		lib remove <name> -- Remove the specified music from the lib
		play <name> -- Play the specified music
	

"`" 这个是1前面的那个键。

`This is a raw string \n` 中的 `\n` 会被原样输出

自定义类型的String()

  type T struct {
	a int
	b float64
	c string
  }

  func (t *T) String() string {
	return fmt.Sprintf("%d-%g-%q", t.a, t.b, t.c)
  }

	t := &T{23, 6.4, "hello"}
	fmt.Printf("%v\n", t)

输出:

23-6.4-"hello"

不要将调用Sprintf的String方法构造成无穷递归。如果Sprintf调用尝试将接收者直接作为字符串进行打印,就会导致再次调用该方法,发生这样的情况。这是一个很常见的错误,正如这个例子所示。

  type MyString string

  func (m MyString) String() string {
    return fmt.Sprintf("MyString=%s", m) // Error: will recur forever.
  }

这也容易修改:将参数转换为没有方法函数的,基本的字符串类型。

  type MyString string
  func (m MyString) String() string {
    return fmt.Sprintf("MyString=%s", string(m)) // OK: note conversion.
  }

只有Sprintf想要一个字符串的时候,才去调用m的String方法,如果是”%f”这样的,就不会去调用该方法。

不带fmt的输出

单纯地打印一个字符串或变量甚至可以使用预定义的方法来实现,如:print、println:print("ABC")、println("ABC")、println(i)(带一个变量 i)。

这些函数只可以用于调试阶段,在部署程序的时候务必将它们替换成 fmt 中的相关函数。

© 著作权归作者所有

共有 人打赏支持
漂泊尘埃

漂泊尘埃

粉丝 5
博文 35
码字总数 70992
作品 0
朝阳
云计算技术之数据结构笔记

云计算技术之数据结构笔记。 #python是数据结构笔记一 #引入:以一道题来展示 #如果a+b+c = 1000,且a^2+b^2 = c^2(a,b,c为自然数),求a,b,c可能的组合 #解析: #枚举法 #思路: #a=0...... #...

寂灭的博客
2017/12/18
0
0
使用 Python 操作 Evernote API

本文作者: 伯乐在线 - LittleCoder 。未经作者许可,禁止转载! 欢迎加入伯乐在线作者团队。 Evernote本身就是很好的笔记应用,其API又赋予了我们更多的自由,值得花点时间尝试。 本文将结合...

刘星石
2016/04/01
8
0
学习笔记一

学习笔记 1、使用判断类型函数:isinstance 2、使用函数 3、使用递归 # -- coding: utf-8 -- #filename:isnstance movies = ["the holy grail",1975,"terry jones & terry illliam",91,["gra......

余二五
2017/11/23
0
0
traceback获取详细的异常信息

本文原地址http://blog.csdn.net/handsomekang/article/details/9373035 笔记存之 [python] view plain copy try: 1/0 except Exception,e: print e 输出结果是integer division or modulo ......

bomby
2017/08/25
0
0
python --roadom学习补充

1、随机函数学习笔记`def print_roadom01(): 如果a > b,则生成的随机数n: a <= n <= b。如果 a

知止内明
2017/12/09
0
0
awk学习笔记

awk的工作流程: 将文件的一行读到内存,然后按分隔符将该行进行分段,其默认的分隔符是空格和TAB。 常用格式1: awk /pattern/ {command1;command2.....} file 用法1 指定分隔符 用-F'分隔符...

香胖
2015/12/04
47
0
PHP5学习笔记:用__call()实现方法重载

今天在网上发现了一片好文章,介绍_call()方法。 依靠这个方法可以实现方法重载,这是找了好久的东西了。 发在这里,算作笔记。 --------------------------------------- PHP5 的对象新增了...

jims
2016/04/20
14
0
Python基础笔记

生命苦短,我用 python Python是一种功能强大的语言,有着功能丰富的第三方包,推崇功能齐全的理念,被广泛用于多种场景下。 *nix系统默认的已经内置了一个python,可通过 python -V 检测: ...

麦拂沙
2016/07/31
17
0
学习笔记之requests篇

我们用python写爬虫的时候经常会用的requests模块,同样还有urllib模块,urllib在上一篇中已经介绍过了,这里介绍一下requests模块 环境:windows 模块:requests Request是用Python语音编写...

董小洋
2017/09/01
0
0
屏幕截取软件--Greenshot

Greenshot是一款免费的开源截图软件,体积小巧到500多KB。虽然体积很小,但是其功能却毫不含糊,该有的功能都有了,只所谓麻雀虽小五 脏俱全。通过快捷键即可进行截图:区域截图(Print),窗...

匿名
2009/10/18
6.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
3分钟前
0
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
8分钟前
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
45分钟前
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
56分钟前
2
0
将博客搬至CSDN

AHUSKY
今天
1
0
Python web框架Django学习(1)

1.Django简介 (1)Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django是一个开放源代码的Web应用框架,由Python写成。 (2...

十年磨一剑3344
今天
0
0
Databook-数据之书

Databook-数据之书 用于数据分析的Jupyter Notebooks。 不需购买服务器,快速开始自己的数据分析过程。 源码:https://github.com/openthings/databook 作者:openthings,https://github.co...

openthings
今天
5
0
Python PIPEs

https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm

zungyiu
今天
1
0
gRPC学习笔记

gRPC编程流程 1. proto文件定义 proto文件用于定义需要通过gRPC生成的接口,可以理解为接口定义文档 2. 通过构建工具生成服务基类代码-Maven或Gradle 3. 服务端开发 服务端实现类须实现通过构...

OSC_fly
今天
0
0
Docker Mac (三) Dockerfile 及命令

Dockerfile 最近学习docker的时候,遇到一件怪事,关于docker镜像可能会被破坏,还不知道它会有此措施 所以需要了解构建Dockerfile的正确方法 Dockerfile是由一系列命令和参数构成的脚本,这些命...

___大侠
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部