Go-编码和占位符的那些事

本文详细介绍了Go语言中`fmt.Printf`的使用,包括字符串、整数、浮点数、复数、布尔值、指针、结构体等类型的格式化输出。通过示例展示了各种格式化标志如%q、%d、%x、%e等的用法,并通过代码演示了如何获取字符串的 runes 和 bytes,以及索引的非连续性。
摘要由CSDN通过智能技术生成
  • range string 索引不一定连续

  • %T 类型

  • %v 值的默认格式

  • %+v 打印结构体时, 会添加字段名

  • %#v Go 语法表示

  • %p 指针

  • %t bool 类型值

  • 整数

    • %b 二进制表示
    • %c 字符
    • %d 十进制
    • %o 八进制
    • %q 单引号字符
    • %x 十六进制, a-f
    • %X 十六进制, A-F
    • %U Unicode格式, U+
  • 浮点数/复数

    • %b 无小数部分的,指数为二的幂的科学计数法
    • %e 科学计数法
    • %E 科学计数法
    • %f 有小数
    • %g %e或%f 紧凑输出
    • %G %E或%F 紧凑输出
  • 字符串/字节切片

    • %s 字符串
    • %s 双引号字符串
    • %x 十六进制
    • %X 十六进制

上代码, 自己品:

package main

import "fmt"

func main() {
	str := "Go编程语言"

	fmt.Printf("string: %q\n", str)
	fmt.Printf("runes(char): %q\n", []rune(str))
	fmt.Printf("runes(hex): %x\n", []rune(str))
	fmt.Printf("bytes(hex): [% x]\n", []byte(str))

}
package main

import "fmt"

func main() {
	str := "Go编程语言"

	for i := range str {
		fmt.Printf("index: %d\n", i) // 不一定连续
	}

	/*
		index: 0
		index: 1
		index: 2
		index: 5
		index: 8
		index: 11
	*/

	for i, s := range str {
		fmt.Printf("%d: %d %q [% x]\n", i, s, s, []byte(string(s)))
	}

	/*
		0: 71 'G' [47]
		1: 111 'o' [6f]
		2: 32534 '编' [e7 bc 96]
		5: 31243 '程' [e7 a8 8b]
		8: 35821 '语' [e8 af ad]
		11: 35328 '言' [e8 a8 80]
	*/
}
package main

import (
	"fmt"
)

type Cat struct {
	Name string
}

func main() {

	fmt.Println("--------------------bool")
	b := true
	fmt.Printf("%t\n", b) // true
	fmt.Printf("%T\n", b) // bool

	fmt.Println("--------------------string")
	str := "Go语言"
	fmt.Printf("%s\n", str)  // Go语言
	fmt.Printf("%q\n", str)  // "Go语言"
	fmt.Printf("%+q\n", str) // "Go\u8bed\u8a00"
	fmt.Printf("%x\n", str)  // 476fe8afade8a880
	fmt.Printf("% x\n", str) // 47 6f e8 af ad e8 a8 80
	fmt.Printf("%X\n", str)  // 476FE8AFADE8A880
	fmt.Printf("%T\n", str)  // string

	fmt.Println("--------------------struct")
	cat := &Cat{Name: "Kitty"}
	fmt.Printf("%v\n", cat)  // &{Kitty}
	fmt.Printf("%+v\n", cat) // &{Name:Kitty}
	fmt.Printf("%#v\n", cat) // &main.Cat{Name:"Kitty"}
	fmt.Printf("%p\n", cat)  // 0xc000010280
	fmt.Printf("%T\n", cat)  // *main.Cat

	fmt.Println("--------------------int")
	i := 66
	fmt.Printf("%b\n", i) // 1000010
	fmt.Printf("%c\n", i) // B
	fmt.Printf("%d\n", i) // 66
	fmt.Printf("%d\n", i) // 66
	fmt.Printf("%o\n", i) // 102
	fmt.Printf("%q\n", i) // 'B'
	fmt.Printf("%x\n", i) // 42
	fmt.Printf("%X\n", i) // 42
	fmt.Printf("%U\n", i) // U+0042
	fmt.Printf("%T\n", i) // int

	fmt.Println("--------------------float")
	f := 66.66
	fmt.Printf("%b\n", f) // 4690780486883082p-46
	fmt.Printf("%e\n", f) // 6.666000e+01
	fmt.Printf("%E\n", f) // 6.666000E+01
	fmt.Printf("%f\n", f) // 66.660000
	fmt.Printf("%g\n", f) // 66.66
	fmt.Printf("%T\n", f) // float64

	fmt.Println("--------------------complex")
	c := 66.66 + 6.6i
	fmt.Printf("%b\n", c) // (4690780486883082p-46+7430939385161318p-50i)
	fmt.Printf("%e\n", c) // (6.666000e+01+6.600000e+00i)
	fmt.Printf("%E\n", c) // (6.666000E+01+6.600000E+00i)
	fmt.Printf("%f\n", c) // (66.660000+6.600000i)
	fmt.Printf("%g\n", c) // (66.66+6.6i)
	fmt.Printf("%G\n", c) // (66.66+6.6i)
	fmt.Printf("%T\n", c) // complex128

	fmt.Println("--------------------arrray/slice")
	list := []int{10, -5, 600}

	fmt.Printf("%d\n", list)  // [10 -5 600]
	fmt.Printf("% d\n", list) // [ 10 -5  600]
	fmt.Printf("%+d\n", list) // [+10 -5 +600]
	fmt.Printf("%T\n", list)  // []int

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值