设为首页 收藏本站
查看: 967|回复: 0

[经验分享] Golang学习 - strconv 包

[复制链接]

尚未签到

发表于 2018-9-19 12:24:56 | 显示全部楼层 |阅读模式
------------------------------------------------------------  

  
// 将布尔值转换为字符串 true 或 false
  
func FormatBool(b bool) string
  

  
// 将字符串转换为布尔值
  
// 它接受真值:1, t, T, TRUE, true, True
  
// 它接受假值:0, f, F, FALSE, false, False
  
// 其它任何值都返回一个错误。
  
func ParseBool(str string) (bool, error)
  

  
------------------------------
  

  
// ErrRange 表示值超出范围
  
var ErrRange = errors.New("value out of range")
  

  
// ErrSyntax 表示语法不正确
  
var ErrSyntax = errors.New("invalid syntax")
  

  
// 将整数转换为字符串形式。base 表示转换进制,取值在 2 到 36 之间。
  
// 结果中大于 10 的数字用小写字母 a - z 表示。
  
func FormatInt(i int64, base int) string
  
func FormatUint(i uint64, base int) string
  

  
// 将字符串解析为整数,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)
  

  
// 将整数转换为十进制字符串形式(即:FormatInt(i, 10) 的简写)
  
func Itoa(i int) string
  

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

  
------------------------------
  

  
// 示例
  
func main() {
  
fmt.Println(strconv.ParseInt("FF", 16, 0))
  
// 255
  
fmt.Println(strconv.ParseInt("0xFF", 16, 0))
  
// 0 strconv.ParseInt: parsing "0xFF": invalid syntax
  
fmt.Println(strconv.ParseInt("0xFF", 0, 0))
  
// 255
  
fmt.Println(strconv.ParseInt("9", 10, 4))
  
// 7 strconv.ParseInt: parsing "9": value out of range
  
}
  

  
------------------------------
  

  
// FormatFloat 将浮点数 f 转换为字符串形式
  
// 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 表示总的数字位数(整数部分+小数部分)
  
// 参考格式化输入输出中的旗标和精度说明
  
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
  

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

  
------------------------------
  

  
// 示例
  
func main() {
  
s := "0.12345678901234567890"
  

  
f, err := strconv.ParseFloat(s, 32)
  
fmt.Println(f, err)                // 0.12345679104328156
  
fmt.Println(float32(f), err)       // 0.12345679
  

  
f, err = strconv.ParseFloat(s, 64)
  
fmt.Println(f, err)                // 0.12345678901234568
  
}
  

  
------------------------------
  

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

  
// 示例:找出所有 !CanBackquote 的字符
  
func main() {
  
for i := rune(0); i < utf8.MaxRune; i++ {
  
if !strconv.CanBackquote(string(i)) {
  
fmt.Printf("%q, ", i)
  
}
  
}
  
}
  

  
// 结果如下:
  
// '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\a', '\b', '\n', '\v', '\f', '\r', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '`', '\u007f', '\ufeff'
  

  
------------------------------
  

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

  
// 判断 r 是否为 Unicode 定义的图形字符。
  
func IsGraphic(r rune) bool
  

  
------------------------------
  

  
// 示例:获取不可打印字符和非图形字符
  
func main() {
  
var rnp, rng, rpng, rgnp []rune
  
const maxLen = 32
  
for i := rune(0); i < utf8.MaxRune; i++ {
  
if !strconv.IsPrint(i) { // 不可打印
  
if len(rnp) < maxLen {
  
rnp = append(rnp, i)
  
}
  
if strconv.IsGraphic(i) && len(rgnp) < maxLen { // 图形字符
  
rgnp = append(rgnp, i)
  
}
  
}
  
if !strconv.IsGraphic(i) { // 非图形字符
  
if len(rng) < maxLen {
  
rng = append(rng, i)
  
}
  
if strconv.IsPrint(i) && len(rpng) < maxLen { // 可打印
  
rpng = append(rpng, i)
  
}
  
}
  
}
  
fmt.Printf("不可打印字符    :%q\n", rnp)
  
fmt.Printf("非图形字符      :%q\n", rng)
  
fmt.Printf("不可打印图形字符:%q\n", rgnp)
  
fmt.Printf("可打印非图形字符:%q\n", rpng)
  
}
  

  
// 不可打印字符    :['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']
  
// 非图形字符      :['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']
  
// 不可打印图形字符:['\u00a0' '\u1680' '\u2000' '\u2001' '\u2002' '\u2003' '\u2004' '\u2005' '\u2006' '\u2007' '\u2008' '\u2009' '\u200a' '\u202f' '\u205f' '\u3000']
  
// 可打印非图形字符:[]
  

  
------------------------------
  

  
// 将 s 转换为双引号字符串
  
func Quote(s string) string
  

  
// 功能同上,非 ASCII 字符和不可打印字符会被转义
  
func QuoteToASCII(s string) string
  

  
// 功能同上,非图形字符会被转义
  
func QuoteToGraphic(s string) string
  

  
------------------------------
  

  
// 示例
  
func main() {
  
s := "Hello\t世界!\n"
  
fmt.Println(s)                         // Hello世界!(换行)
  
fmt.Println(strconv.Quote(s))          // "Hello\t世界!\n"
  
fmt.Println(strconv.QuoteToASCII(s))   // "Hello\t\u4e16\u754c\uff01\n"
  
fmt.Println(strconv.QuoteToGraphic(s)) // "Hello\t世界!\n"
  
}
  

  
------------------------------
  

  
// 将 r 转换为单引号字符
  
func QuoteRune(r rune) string
  

  
// 功能同上,非 ASCII 字符和不可打印字符会被转义
  
func QuoteRuneToASCII(r rune) string
  

  
// 功能同上,非图形字符会被转义
  
func QuoteRuneToGraphic(r rune) string
  

  
------------------------------
  

  
// Unquote 将“带引号的字符串” s 转换为常规的字符串(不带引号和转义字符)
  
// s 可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身)
  
// 如果 s 是单引号引起来的字符串,则返回该该字符串代表的字符
  
func Unquote(s string) (string, error)
  

  
// UnquoteChar 将带引号字符串(不包含首尾的引号)中的第一个字符“取消转义”并解码
  
//
  
// s    :带引号字符串(不包含首尾的引号)
  
// quote:字符串使用的“引号符”(用于对字符串中的引号符“取消转义”)
  
//
  
// value    :解码后的字符
  
// multibyte:value 是否为多字节字符
  
// tail     :字符串 s 解码后的剩余部分
  
// error    :返回 s 中是否存在语法错误
  
//
  
// 参数 quote 为“引号符”
  
// 如果设置为单引号,则 s 中允许出现 \'、" 字符,不允许出现单独的 ' 字符
  
// 如果设置为双引号,则 s 中允许出现 \"、' 字符,不允许出现单独的 " 字符
  
// 如果设置为 0,则不允许出现 \' 或 \" 字符,但可以出现单独的 ' 或 " 字符
  
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
  

  
------------------------------
  

  
// 示例
  
func main() {
  
s1 := "`Hello世界!`"                 // 解析反引号字符串
  
s2 := `"Hello\t\u4e16\u754c\uff01"` // 解析双引号字符串
  
fmt.Println(strconv.Unquote(s1))    // Hello世界!
  
fmt.Println(strconv.Unquote(s2))    // Hello世界!
  

  
fmt.Println()
  
fmt.Println(strconv.UnquoteChar(`\u4e16\u754c\uff01`, 0))
  
// 19990 true \u754c\uff01
  
fmt.Println(strconv.UnquoteChar(`\"abc\"`, '"'))
  
// 34 false abc\"
  
}
  

  
------------------------------
  

  
// 将各种类型转换为字符串后追加到 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
  

  
// 将各种类型转换为带引号字符串后追加到 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
  

  
------------------------------------------------------------
  

  

  

  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-594263-1-1.html 上篇帖子: Golang学习 - fmt 包 下篇帖子: 老虞要学GoLang
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表