格式化布尔值
布尔值使用 %t (真值) 格式指令来输出
例子:
package main
import (
"fmt"
)
func IntForBool (b bool) int {
if b {
return 1
}
return 0
}
func main() {
fmt.Printf("%t %t\n", true, false)
fmt.Printf("%d %d\n", IntForBool(true), IntForBool(false))
}
也可以使用 strconv.ParseBool() 函数来将字符串转化为布尔值
格式化整数
例子:
package main
import (
"fmt"
"unicode/utf8"
"strings"
)
func main() {
i := 3931
fmt.Printf("|%b|%9b|%-9b|%09b|% 9b|\n", 37, 37, 37, 37, 37)
fmt.Printf("|%o|%#o|%# 8o|%#+ 8o|%+08o|\n", 41, 41, 41, 41, -41)
fmt.Printf("|%x|%X|%8x|%08x|%#04X|0x%04X|\n", i, i, i, i, i, i)
fmt.Printf("|$%d|$%06d|$%+06d|$%s|\n", i, i, i, Pad(i, 6, '*'))
}
func Pad(number, width int, pad rune) string {
s := fmt.Sprint(number)
gap := width - utf8.RuneCountInString(s)
if gap > 0 {
return strings.Repeat(string(pad), gap) + s
}
return s
}
使用 # 修饰符可以切换格式,从而在输出时以 0 打头
+ 修饰符会强制输出正号,如果没有该修饰符,正整数输出时前面没有正号
十进制 %d 格式指令,唯一可用于当做填充的字符是空格和 0,但也可以使用自定义函数来填充
utf8.RuneCountInString() 函数返回给定字符串的字符数,这个数字永远小于或等于其字节数
strings.Repeat() 函数接受一个字符串和一个计数,返回一个将该字符串重复给定次数后产生的字符串
格式化字符
Go 语言的字符都是 rune(既 int32 值),它可以已数字或者 Unicode 字符的形式输出
格式化浮点数
浮点数格式可以指定整体长度、小数位数,以及使用标准计数法还是科学计数法
例子:
package main
import (
"fmt"
"unicode/utf8"
"strings"
"math"
)
func main() {
for _, x := range []float64{-.258, 7194.84, -60897162.0218, 1.500089e-8} {
fmt.Printf("|%20.5e|%20.5f|%s|\n", x, x, Humanize(x, 20, 5, '*', ','))
}
}
func Humanize(amount float64, width, decimals int, pad, separator rune) string {
dollars, cents := math.Modf(amount)
whole := fmt.Sprint("%+.0f", dollars)[1:]
fraction := ""
if decimals > 0 {
fraction = fmt.Sprintf("%+.*f", decimals, cents)[2:]
}
sep := string(separator)
for i := len(whole) - 3; i > 0; i -= 3 {
whole = whole[:i] + sep + whole[i:]
}
if amount < 0.0 {
whole = "-" + whole
}
number := whole + fraction
gap := width - utf8.RuneCountInString(number)
if gap > 0 {
return strings.Repeat(string(pad), gap) + number
}
return number
}
math。Modf() 函数将一个 float64 类型的整数部分和小数部分以 float64 类型的树的形式返回
%e、%E、%f、%g、%G 格式指令既可以用于复数,也可以用于浮点数
%e和%E是科学计算法格式(指数的)格式指令
格式化字符串和切片
Go语言默认是居右对齐,我们可以使用-修饰符来将其居左对齐
为调试格式化
%T(类型)格式指令用于打印一个内置的或者自定义值的类型,而 %v 格式指令则用于打印一个内置值的值
Go语言中有两种类型是同义的:uint8 和 byte,int32 和 rune
其他字符处理相关的包
Go语言处理字符串的强大之处不仅限于对索引和切片的支持,也不限于fmt的格式化功能,strings包提供了非常强大的功能,此外strconv、unicode/utf8、unicode等也提供了大量实用的函数