1 概述

Go语言是强类型语言,因此总会需要将字符串转成需要的类型。比如整型和字符串转换,字符串和布尔型的转换等。本文就介绍如何完成这些转换,以下是Go语言关于字符串转换的整理说明,主要是与切片类型的转换,和 strconv 包的使用。

2 与切片的转换

切片类型可以和字符串类型相互转换。

  1. fmt.Println([]rune("Hello小韩说课"))
  2. // [72 101 108 108 111 23567 38889 35828 35838]
  3. fmt.Println(string([]rune{72, 101, 108, 108, 111, 23567, 38889, 35828, 35838}))
  4. // Hello小韩说课
  5. fmt.Println([]byte("Hello"))
  6. // [72 101 108 108 111]
  7. fmt.Println(string([]byte{72, 101, 108, 108, 111}))
  8. // Hello

3 strconv 包

会将常用的放在前面:

strconv.Atoi(s string) (int, error)

转换字符串 s string 到整型。

  1. v := "10"
  2. if s, err := strconv.Atoi(v); err == nil {
  3. fmt.Printf("%T, %v", s, s)
  4. }
  5. // int, 10
  6. // 相当于
  7. strconv.ParseInt(s, 10, 0)

strconv.Itoa(i int) string

将整型转 i int 换为字符串

  1. i := 10
  2. s := strconv.Itoa(i)
  3. fmt.Printf("%T, %v\n", s, s)
  4. // string, 10

strconv.ParseFloat(s string, bitSize int) (float64, error)

解析字符 str string 串为浮点,可以设置位数。

  1. v := "3.1415926535"
  2. if s, err := strconv.ParseFloat(v, 32); err == nil {
  3. fmt.Printf("%T, %v\n", s, s)
  4. }
  5. // float64, 3.1415927410125732
  6. if s, err := strconv.ParseFloat(v, 64); err == nil {
  7. fmt.Printf("%T, %v\n", s, s)
  8. }
  9. // float64, 3.1415926535

strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)

解析字符 str string 串为整数,可以设置进制、位数。

  1. v32 := "-354634382"
  2. if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
  3. fmt.Printf("%T, %v\n", s, s)
  4. }
  5. if s, err := strconv.ParseInt(v32, 16, 32); err == nil {
  6. fmt.Printf("%T, %v\n", s, s)
  7. }
  8. // int64, -354634382
  9. v64 := "-3546343826724305832"
  10. if s, err := strconv.ParseInt(v64, 10, 64); err == nil {
  11. fmt.Printf("%T, %v\n", s, s)
  12. }
  13. if s, err := strconv.ParseInt(v64, 16, 64); err == nil {
  14. fmt.Printf("%T, %v\n", s, s)
  15. }
  16. // int64, -3546343826724305832

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

将浮点数 f float64 转换为字符串,可以设置格式 fmt(b,e,E,f,g,G)、精度prce、位数(32或64)。

  1. v := 3.1415926535
  2. s32 := strconv.FormatFloat(v, 'E', -1, 32)
  3. fmt.Printf("%T, %v\n", s32, s32)
  4. // string, 3.1415927E+00
  5. s64 := strconv.FormatFloat(v, 'E', -1, 64)
  6. fmt.Printf("%T, %v\n", s64, s64)
  7. // string, 3.1415926535E+00

strconv.FormatInt(i int64, base int) string

将整数 i int64 转换为字符串,可以指定进制 base。

  1. v := int64(-42)
  2. s10 := strconv.FormatInt(v, 10)
  3. fmt.Printf("%T, %v\n", s10, s10)
  4. // string, -42
  5. s16 := strconv.FormatInt(v, 16)
  6. fmt.Printf("%T, %v\n", s16, s16)
  7. // string, -2a

strconv.AppendBool(dst []byte, b bool) []byte

将布尔值 b bool 以字符串形式追加到 dst []byte 中。

  1. b := []byte("bool:")
  2. b = strconv.AppendBool(b, true)
  3. fmt.Println(string(b))
  4. // bool:true
  5. // 相当于
  6. append(dst []byte, strconv.FormatBool(b bool))

strconv.AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte

将浮点数 f float64 以字符串形式追加到 dst []byte 中,可以设置格式 fmt(b,e,E,f,g,G)、精度prce、位数(32或64)。

  1. b32 := []byte("float32:")
  2. b32 = strconv.AppendFloat(b32, 3.1415926535, 'E', -1, 32)
  3. fmt.Println(string(b32))
  4. // float32:3.1415927E+00
  5. b64 := []byte("float64:")
  6. b64 = strconv.AppendFloat(b64, 3.1415926535, 'E', -1, 64)
  7. fmt.Println(string(b64))
  8. // float64:3.1415926535E+00
  9. // 相当于
  10. append(dst []byte, strconv.FormatFloat(3.1415926535, 'E', -1, 64))

strconv.AppendInt(dst []byte, i int64, base int) []byte

将整数 i int64 以字符串形式追加到 dst []byte 中,可以指定进制。

  1. b10 := []byte("int (base 10):")
  2. b10 = strconv.AppendInt(b10, -42, 10)
  3. fmt.Println(string(b10))
  4. // int (base 10):-42
  5. b16 := []byte("int (base 16):")
  6. b16 = strconv.AppendInt(b16, -42, 16)
  7. fmt.Println(string(b16))
  8. // int (base 16):-2a
  9. // 相当于
  10. append(dst []byte, strconv.FormatInt(-42, 10))
  11. append(dst []byte, strconv.FormatInt(-42, 16))

strconv.AppendQuote(dst []byte, s string) []byte

将字符串 s string 以字符串双引号定义的形式追加到 dst []byte 中。

  1. b := []byte("quote:")
  2. b = strconv.AppendQuote(b, `"Fran & Freddie's Diner"`)
  3. fmt.Println(string(b))
  4. // quote:"\"Fran & Freddie's Diner\""
  5. // 相当于
  6. append(dst []byte, strconv.Quote(`"Fran & Freddie's Diner"`))

strconv.AppendQuoteRune(dst []byte, r rune) []byte

将字符 r rune 以字单引号定义的形式追加到 dst []byte 中。

  1. b := []byte("rune:")
  2. b = strconv.AppendQuoteRune(b, '☺')
  3. fmt.Println(string(b))
  4. // rune:'☺'
  5. // 相当于
  6. append(dst []byte, strconv.QuoteRune('☺'))

strconv.AppendQuoteRuneToASCII(dst []byte, r rune) []byte

将字符 r rune 以字单引号定义的形式追加到 dst []byte 中,对于非 ASCII 字符 r 会以转义字符的形式出现。

  1. b := []byte("rune (ascii):")
  2. b = strconv.AppendQuoteRuneToASCII(b, '☺')
  3. fmt.Println(string(b))
  4. // rune (ascii):'\u263a'
  5. // 相当于
  6. append(dst []byte, strconv.QuoteRuneToASCII('☺'))

strconv.AppendQuoteToASCII(dst []byte, s string) []byte

将字符串 s string 以字符串双引号定义的形式追加到 dst []byte 中,非 ASCII 字符以转义形式表示。

  1. b := []byte("quote (ascii):")
  2. b = strconv.AppendQuoteToASCII(b, `"Fran & Freddie's Diner"`)
  3. fmt.Println(string(b))
  4. // quote (ascii):"\"Fran & Freddie's Diner\""
  5. // 相当于
  6. append(dst []byte, strconv.QuoteToASCII(`"Fran & Freddie's Diner"`))

strconv.AppendUint(dst []byte, i uint64, base int) []byte

将无符号整数 i uint64 以字符串形式追加到 dst []byte 中,可以指定进制。

  1. b10 := []byte("uint (base 10):")
  2. b10 = strconv.AppendUint(b10, 42, 10)
  3. fmt.Println(string(b10))
  4. // uint (base 10):42
  5. b16 := []byte("uint (base 16):")
  6. b16 = strconv.AppendUint(b16, 42, 16)
  7. fmt.Println(string(b16))
  8. // uint (base 16):2a

strconv.CanBackquote(s string) bool

检测字符串 s string 是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串。

  1. fmt.Println(strconv.CanBackquote("Fran & Freddie's Diner ☺"))
  2. // true
  3. fmt.Println(strconv.CanBackquote("`can't backquote this`"))
  4. // false

strconv.FormatBool(b bool) string

将布尔 b bool 转换为字符串。

  1. v := true
  2. s := strconv.FormatBool(v)
  3. fmt.Printf("%T, %v\n", s, s)
  4. // string, true

strconv.FormatUint(i uint64, base int) string

将无符号整数 i uint64 转换为字符串,可以指定进制 base。

  1. v := uint64(42)
  2. s10 := strconv.FormatUint(v, 10)
  3. fmt.Printf("%T, %v\n", s10, s10)
  4. // string, 42
  5. s16 := strconv.FormatUint(v, 16)
  6. fmt.Printf("%T, %v\n", s16, s16)
  7. // string, 2a

strconv.IsPrint(r rune) bool

检测字符 r rune 是否为打印字符。

  1. c := strconv.IsPrint('\u263a')
  2. fmt.Println(c)
  3. // true
  4. bel := strconv.IsPrint('\007')
  5. fmt.Println(bel)
  6. // false

strconv.ParseBool(str string) (bool, error)

解析字符 str string 串为布尔型。

  1. v := "true"
  2. if s, err := strconv.ParseBool(v); err == nil {
  3. fmt.Printf("%T, %v\n", s, s)
  4. }
  5. // bool, true

strconv.ParseUint(s string, base int, bitSize int) (uint64, error)

解析字符 str string 串为无符号整数,可以设置进制、位数。

  1. v := "42"
  2. if s, err := strconv.ParseUint(v, 10, 32); err == nil {
  3. fmt.Printf("%T, %v\n", s, s)
  4. }
  5. // uint64, 42
  6. if s, err := strconv.ParseUint(v, 10, 64); err == nil {
  7. fmt.Printf("%T, %v\n", s, s)
  8. }
  9. // uint64, 42

strconv.Quote(s string) string

返回字符串 s string 双引号字面值表示,控制字符、不可打印字符会进行转义,如 \t,\n,\xFF,\u0100。

  1. s := strconv.Quote(`"Fran & Freddie's Diner ☺"`)
  2. fmt.Println(s)
  3. // "\"Fran & Freddie's Diner\t☺\""

strconv.QuoteRune(r rune) string

返回字符 r rune 单引号字面值表示,控制字符、不可打印字符会进行转义,如\t,\n,\xFF,\u0100。

  1. s := strconv.QuoteRune('☺')
  2. fmt.Println(s)
  3. // '☺'

strconv.QuoteRuneToASCII(r rune) string

返回字符 r rune 单引号字面值表示,控制字符、不可打印字符、非ASCII字符会进行转义。

  1. s := strconv.QuoteRuneToASCII('☺')
  2. fmt.Println(s)
  3. // '\u263a'

strconv.QuoteToASCII(s string) string

返回字符串 s string 双引号字面值表示,控制字符和不可打印字符、非ASCII字符会进行转义。

  1. s := strconv.QuoteToASCII(`"Fran & Freddie's Diner ☺"`)
  2. fmt.Println(s)
  3. // "\"Fran & Freddie's Diner\t\u263a\""

strconv.Unquote(s string) (string, error)

返回一个单引号、双引号、反引号包围的语法字符串 s string,解析它并返回它表示的值。若为反引号括起来的,函数会认为s是go字符字面值,返回一个单字符的字符串。

  1. s, err := strconv.Unquote("You can't unquote a string without quotes")
  2. fmt.Printf("%q, %v\n", s, err)
  3. // "", invalid syntax
  4. s, err = strconv.Unquote("\"The string must be either double-quoted\"")
  5. fmt.Printf("%q, %v\n", s, err)
  6. // "The string must be either double-quoted", <nil>
  7. s, err = strconv.Unquote("`or backquoted.`")
  8. fmt.Printf("%q, %v\n", s, err)
  9. // "or backquoted.", <nil>
  10. s, err = strconv.Unquote("'\u263a'") // single character only allowed in single quotes
  11. fmt.Printf("%q, %v\n", s, err)
  12. // "☺", <nil>
  13. s, err = strconv.Unquote("'\u2639\u2639'")
  14. fmt.Printf("%q, %v\n", s, err)
  15. // "", invalid syntax

strconv.UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)

返回一个表示字符的语法字符串 s string,可以设置字符串定义语法 quote byte 双引号或者反引号。解析它并返回四个值:

  1. v, mb, t, err := strconv.UnquoteChar(`\"Fran & Freddie's Diner\"`, '"')
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. fmt.Println("value:", string(v))
  6. // value: "
  7. fmt.Println("multibyte:", mb)
  8. // multibyte: false
  9. fmt.Println("tail:", t)
  10. // tail: Fran & Freddie's Diner\"

完!
原文出自:小韩说课
微信关注:小韩说课

Go语言中其他数据与字符串类型的转换的更多相关文章

  1. 【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型

    导读:我们知道,在数据库中,数据集DataSet是由多张DataTable表组成.所以,如果我们需要将数据从外部导入到数据库中,那么要做的很重要的一步是将这些数据转换为数据库可以接受的结构.今天在用S ...

  2. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一    二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...

  3. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

  4. C语言中强制数据类型转换(转)

    原文地址不详 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255(有些 ...

  5. C语言中的数组与字符串

    1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...

  6. C语言中字符数据的输入和输出

    字符的输出 C语言中使用putchar函数来输出字符数据 #include <stdio.h> int main() { char a,b,c,d; //定义字符变量a,b,c,d a = ...

  7. c语言中的结构体指针类型的cast

    1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针, ...

  8. C 语言中实现数据与方法的封装

    在 C 语言中可以用结构体代替类,用函数指针代替成员方法,实现数据成员与成员方法的封装,在客户端写出的程序与 C++ 类似,唯一的不同是 C 语言中调用函数指针成员时必须将本对象的地址传给函数,因为 ...

  9. VC++和C语言中常见数据类型转换为字符串的方法

    1.短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换 2.长整型(long) lt ...

随机推荐

  1. cocos ide使用binding-generator导出来的c++类

    time:2015/03/19 cocos版本:3.2 描述:用了ide运行一个实例[1]的时候需要增加c++类,正确导出来之后,直接使用vs2012启动是没有问题的,但是使用ide启动却提示找不到模 ...

  2. Linux入门-5 用户及权限基础

    1. Linux用户基础 用户 相关文件 查看登录的用户 添加用户 修改用户信息 删除用户 组 2. Linux权限机制 权限 UGO 修改文件所属用户和组 修改权限 3. Linux权限扩展 默认权 ...

  3. 海量数据处理面试题(1) 找出两文件种包含的相同的url

    问题:给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 分析:50亿个url,每个url64字节,就是320G,显然是无法一次读入内存 ...

  4. 计算机支持的最大内存与CPU之间的关系

    在使用计算机时,其最大支持的内存是由  操作系统 和 硬件 两方面决定的. 先说一下硬件方面的因素,在计算机中 CPU的地址总线数目 决定了CPU 的 寻址 范围,这种由地址总线对应的地址称作为物理地 ...

  5. 在python命令行执行sudo命令

    def test(): sudoPassword = 'test' command = '/opt/lampp/lampp stopmysql' str = os.system('echo %s|su ...

  6. 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.    文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云( ...

  7. P3174 [HAOI2009]毛毛虫

    题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入输出格 ...

  8. sublime text 3 搭建python ide

    SublimeCodeIntel 代码提示插件 安装步骤: 1.打开Package Control[Preferences>>Package Control] 2.输入 install 选 ...

  9. list详解

    #include <iostream> #include <vector> #include <list> std::list<std::string> ...

  10. linux下批量重命名文件

    # 使用通配符批量创建 多个文件:$ touch zqunor{1..7}.txt # 批量将多个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件:$ rename 's/\.txt/\.c ...