Go 语言程序设计——字符串类型(2)

格式化布尔值

布尔值使用 %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语言中有两种类型是同义的:uint8byteint32rune

其他字符处理相关的包

Go语言处理字符串的强大之处不仅限于对索引和切片的支持,也不限于fmt的格式化功能,strings包提供了非常强大的功能,此外strconv、unicode/utf8、unicode等也提供了大量实用的函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,954评论 0 5
  • 字面量、操作符和转义: 字面量使用 " 双引号或者 ` 反引号来创建 双引号创建的字符串字面量,支持转义序列,但不...
    hlemon阅读 2,286评论 0 0
  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 9,913评论 1 27
  • 字符串在 Go 语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、f...
    DreamKing阅读 7,669评论 0 0
  • 字符串和字符 甲串是一系列字符,如的"hello, world"或"albatross"。Swift字符串由Str...
    Fuuqiu阅读 4,640评论 0 0