美文网首页
Go 语言程序设计——字符串类型(2)

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

作者: hlemon | 来源:发表于2019-05-05 11:18 被阅读0次

    格式化布尔值

    布尔值使用 %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等也提供了大量实用的函数

    相关文章

      网友评论

          本文标题:Go 语言程序设计——字符串类型(2)

          本文链接:https://www.haomeiwen.com/subject/erjhnqtx.html