关闭

Go语言学习之strconv包(The way to go)

标签: go语言golangstrconv
3454人阅读 评论(0) 收藏 举报
分类:

生命不止,继续 go go go !!!

今天跟大家一起分享strconv包,strconv是golang用来做数据类型转换的一个库。

文档地址:
https://golang.org/pkg/strconv/

作用:
Package strconv implements conversions to and from string representations of basic data types.

Package strconv
strconv为我们提供的方法:

1.Append类型的方法

将各种类型转换为字符串后追加到 dst 尾部。

func AppendInt(dst []byte, i int64, base int) []byte
func AppendUint(dst []byte, i uint64, base int) []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
func AppendBool(dst []byte, b bool) []byte

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    b := []byte("bool:")
    b = strconv.AppendBool(b, true)
    fmt.Println(string(b))

    b32 := []byte("float32:")
    b32 = strconv.AppendFloat(b32, 3.1415926535, 'E', -1, 32)
    fmt.Println(string(b32))

    b10 := []byte("int (base 10):")
    b10 = strconv.AppendInt(b10, -42, 10)
    fmt.Println(string(b10))

    b16 := []byte("uint (base 16):")
    b16 = strconv.AppendUint(b16, 42, 16)
    fmt.Println(string(b16))
}

输出:
bool:true
float32:3.1415927E+00
int (base 10):-42
uint (base 16):2a

将各种类型转换为带引号字符串后追加到 dst 尾部。

func AppendQuote(dst []byte, s string) []byte
func AppendQuoteToASCII(dst []byte, s string) []byte
func AppendQuoteToGraphic(dst []byte, s string) []byte
func AppendQuoteRune(dst []byte, r rune) []byte
func AppendQuoteRuneToASCII(dst []byte, r rune) []byte
func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    b := []byte("quote:")
    b = strconv.AppendQuote(b, `"Fran & Freddie's Diner"`)
    fmt.Println(string(b))

    b = []byte("rune:")
    b = strconv.AppendQuoteRune(b, '☺')
    fmt.Println(string(b))

    b = []byte("rune (ascii):")
    b = strconv.AppendQuoteRuneToASCII(b, '☺')
    fmt.Println(string(b))

    b = []byte("quote (ascii):")
    b = strconv.AppendQuoteToASCII(b, `"Fran & Freddie's Diner"`)
    fmt.Println(string(b))
}

输出:
quote:”\”Fran & Freddie’s Diner\””
rune:’☺’
rune (ascii):’\u263a’
quote (ascii):”\”Fran & Freddie’s Diner\”“

2.Format类型的方法

将布尔值转换为字符串 true 或 false

func FormatBool(b bool) string

将浮点数 f 转换为字符串形式

func FormatFloat(f float64, fmt byte, prec, bitSize int) string

f:要转换的浮点数
fmt:格式标记(b、e、E、f、g、G)
prec:精度(数字部分的长度,不包括指数部分)
bitSize:指定浮点类型(32:float32、64:float64),结果会据此进行舍入。

格式标记:
‘b’ (-ddddp±ddd,二进制指数)
‘e’ (-d.dddde±dd,十进制指数)
‘E’ (-d.ddddE±dd,十进制指数)
‘f’ (-ddd.dddd,没有指数)
‘g’ (‘e’:大指数,’f’:其它情况)
‘G’ (‘E’:大指数,’f’:其它情况)

如果格式标记为 ‘e’,’E’和’f’,则 prec 表示小数点后的数字位数
如果格式标记为 ‘g’,’G’,则 prec 表示总的数字位数(整数部分+小数部分)
参考格式化输入输出中的旗标和精度说明

将整数转换为字符串形式。base 表示转换进制,取值在 2 到 36 之间。
结果中大于 10 的数字用小写字母 a - z 表示。

func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v := true
    s := strconv.FormatBool(v)
    fmt.Printf("%T, %v\n", s, s)

    v_float := 3.1415926535
    s32 := strconv.FormatFloat(v_float, 'E', -1, 32)
    fmt.Printf("%T, %v\n", s32, s32)
    s64 := strconv.FormatFloat(v_float, 'E', -1, 64)
    fmt.Printf("%T, %v\n", s64, s64)

    v_int := int64(-42)
    s10 := strconv.FormatInt(v_int, 10)
    fmt.Printf("%T, %v\n", s10, s10)
    s16 := strconv.FormatInt(v_int, 16)
    fmt.Printf("%T, %v\n", s16, s16)

    v_uint := uint64(42)
    s10 = strconv.FormatUint(v_uint, 10)
    fmt.Printf("%T, %v\n", s10, s10)
    s16 = strconv.FormatUint(v_uint, 16)
    fmt.Printf("%T, %v\n", s16, s16)
}

输出:
string, true
string, 3.1415927E+00
string, 3.1415926535E+00
string, -42
string, -2a
string, 42
string, 2a

3.Parse类型的方法
将字符串转换为布尔值
它接受真值:1, t, T, TRUE, true, True
它接受假值:0, f, F, FALSE, false, False
其它任何值都返回一个错误。

func ParseBool(str string) (bool, error)

将字符串解析为浮点数,使用 IEEE754 规范进行舍入。
bigSize 取值有 32 和 64 两种,表示转换结果的精度。
如果有语法错误,则 err.Error = ErrSyntax
如果结果超出范围,则返回 ±Inf,err.Error = ErrRange

func ParseFloat(s string, bitSize int) (float64, error)

将字符串解析为整数,ParseInt 支持正负号,ParseUint 不支持正负号。
base 表示进位制(2 到 36),如果 base 为 0,则根据字符串前缀判断,
前缀 0x 表示 16 进制,前缀 0 表示 8 进制,否则是 10 进制。
bitSize 表示结果的位宽(包括符号位),0 表示最大位宽。

func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v := "true"
    if s, err := strconv.ParseBool(v); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }

    v_float := "3.1415926535"
    if s, err := strconv.ParseFloat(v_float, 32); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }
    if s, err := strconv.ParseFloat(v_float, 64); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }

    v32_int := "-354634382"
    if s, err := strconv.ParseInt(v32_int, 10, 32); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }
    if s, err := strconv.ParseInt(v32_int, 16, 32); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }

    v64_int := "-3546343826724305832"
    if s, err := strconv.ParseInt(v64_int, 10, 64); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }
    if s, err := strconv.ParseInt(v64_int, 16, 64); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }

    v_uint := "42"
    if s, err := strconv.ParseUint(v_uint, 10, 32); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }
    if s, err := strconv.ParseUint(v_uint, 10, 64); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    }

}

输出:
bool, true
float64, 3.1415927410125732
float64, 3.1415926535
int64, -354634382
int64, -3546343826724305832
uint64, 42
uint64, 42

4.Quote类型的方法

将 s 转换为双引号字符串

func Quote(s string) string

功能同上,非 ASCII 字符和不可打印字符会被转义

func QuoteToASCII(s string) string

功能同上,非图形字符会被转义

func QuoteToGraphic(s string) string

将 r 转换为单引号字符

func QuoteRune(r rune) string

功能同上,非 ASCII 字符和不可打印字符会被转义

func QuoteRuneToASCII(r rune) string

功能同上,非图形字符会被转义

func QuoteRuneToGraphic(r rune) string

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := strconv.Quote(`"Fran & Freddie's Diner ☺"`)
    fmt.Println(s)

    s = strconv.QuoteRune('☺')
    fmt.Println(s)

    s = strconv.QuoteRuneToASCII('☺')
    fmt.Println(s)

    s = strconv.QuoteToASCII(`"Fran & Freddie's Diner   ☺"`)
    fmt.Println(s)
}

输出:
“\”Fran & Freddie’s Diner\t☺\””
‘☺’
‘\u263a’
“\”Fran & Freddie’s Diner\t\u263a\”“

其他
将整数转换为十进制字符串形式(即:FormatInt(i, 10) 的简写)

func Itoa(i int) string

将字符串转换为十进制整数,即:ParseInt(s, 10, 0) 的简写)

func Atoi(s string) (int, error)

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v := "10"
    if s, err := strconv.Atoi(v); err == nil {
        fmt.Printf("%T, %v", s, s)
    }

    fmt.Println()
    i := 10
    s := strconv.Itoa(i)
    fmt.Printf("%T, %v\n", s, s)
}

输出:
int, 10
string, 10

判断字符串是否可以不被修改的表示为一个单行的反引号字符串。
字符串中不能含有控制字符(除了 \t)和“反引号”字符,否则返回 false

func CanBackquote(s string) bool

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    fmt.Println(strconv.CanBackquote("Fran & Freddie's Diner ☺"))
    fmt.Println(strconv.CanBackquote("`can't backquote this`"))
}

判断 r 是否为可打印字符
可否打印并不是你想象的那样,比如空格可以打印,而\t则不能打印

func IsPrint(r rune) bool

应用例子:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    c := strconv.IsPrint('\u263a')
    fmt.Println(c)

    bel := strconv.IsPrint('\007')
    fmt.Println(bel)
}

这里写图片描述

0
0
查看评论

九、Go语言库之strconv包--GO语言笔记

package mainimport "fmt" import "strconv"func main() { /* 由于将字符串转为其他数据类型可能会出错,strconv 包定义了两个 error 类型的变量:ErrRange ...
  • alvine008
  • alvine008
  • 2016-04-29 17:15
  • 1081

Go语言学习之net包(The way to go)

生命不止,继续go go go!!!不要问我net包和net/http包的区别,我们先会用,两者的区别慢慢去体会。net包有什么作用?Package net provides a portable interface for network I/O, including TCP/IP, UDP, d...
  • wangshubo1989
  • wangshubo1989
  • 2017-04-13 02:19
  • 4655

遗传算法:go语言实现

tips:写这个遗传算法的另一个目的是为了练习go语言,如有缺陷,请不吝赐教。下面算法用来求解函数y=x^7+x^6-100x^5+200x^4-300x^3-13579x^2-2468x+123456789函数再(-8,8)上的最小值对于该问题解空间是非常明确的。对于结果偏差小于0.001则视为未...
  • godwei_ding
  • godwei_ding
  • 2017-12-08 12:47
  • 96

golang 中strconv包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3262925.html
  • chenbaoke
  • chenbaoke
  • 2014-10-20 21:09
  • 6961

我的Go语言学习之旅六:做一个WIN的简单弹窗

做为一个WIN的爱好者,不得不说,通常情况下在学习一门新语言之后我会很急于制作一个弹窗来测试一下这个语言在WIN的窗体效果,这里不多说,先上代码。package mainimport ("github.com/lxn/go-winapi""syscall"&q...
  • w_yunlong
  • w_yunlong
  • 2015-12-29 11:57
  • 2249

go 语言学习历程

梳理作者学习深入学习go语言中的关键技术点,并导航到各个大牛对疑难点的剖析,作为go语言提高者必须要读的一篇文章。
  • hittata
  • hittata
  • 2015-01-04 10:57
  • 15873

Go语言包管理(一)

Go语言中的包我们在使用其他语言,比如Java,Python,都有类似包的概念,Go也不例外,其核心思想即为分组和模块化。人的大脑对庞大和复杂的事情很难掌控,可以对其采用分而治之的策略,使其模块化,从而更容易管理。 如下是标准库中net包的树形结构图 net ├─http │ ├─...
  • matrix65537
  • matrix65537
  • 2017-05-15 20:24
  • 616

Go语言三大框架点评

了解了基本的Go语言web框架,下面将对这些框架做个点评。 1  Beego      Beego 作为一个功能强大的MVC框架,具备与Rails同级别的特性,并且吸收了Python框架Tornado和Flask 的高级特性。它是...
  • GreatElite
  • GreatElite
  • 2016-03-01 10:36
  • 3679

Go语言学习之指针(The way to go)

生命不止,继续Go go go. 今天与大家分享golang中的Pointers。如果你是从c++转到go,那么恭喜你,对于指针可谓清晰明了。通过例子进行讲解:package mainimport "fmt"func updateValue(val int) { val ...
  • wangshubo1989
  • wangshubo1989
  • 2017-04-05 16:44
  • 6007

Go语言学习之常量(The way to go)

生命不止,继续go go go .上一篇博客《Go语言学习之变量(The way to go)介绍了go中的变量,今天就介绍常量。const关键字跟c++中一样,go中同样具有const关键字,来声明常量。 语法是这样的:const variable type = value;下面就是简单的常量定...
  • wangshubo1989
  • wangshubo1989
  • 2017-02-23 00:46
  • 13828
    个人资料
    • 访问:4732785次
    • 积分:42147
    • 等级:
    • 排名:第97名
    • 原创:571篇
    • 转载:29篇
    • 译文:13篇
    • 评论:784条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics