1 概述

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

2 与切片的转换

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

fmt.Println([]rune("Hello小韩说课"))
// [72 101 108 108 111 23567 38889 35828 35838]
fmt.Println(string([]rune{72, 101, 108, 108, 111, 23567, 38889, 35828, 35838}))
// Hello小韩说课 fmt.Println([]byte("Hello"))
// [72 101 108 108 111]
fmt.Println(string([]byte{72, 101, 108, 108, 111}))
// Hello

3 strconv 包

会将常用的放在前面:

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

转换字符串 s string 到整型。

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

strconv.Itoa(i int) string

将整型转 i int 换为字符串

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

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

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

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

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

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

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

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

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

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

strconv.FormatInt(i int64, base int) string

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

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

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

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

b := []byte("bool:")
b = strconv.AppendBool(b, true)
fmt.Println(string(b))
// bool:true // 相当于
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)。

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

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

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

b10 := []byte("int (base 10):")
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
// int (base 10):-42 b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
// int (base 16):-2a // 相当于
append(dst []byte, strconv.FormatInt(-42, 10))
append(dst []byte, strconv.FormatInt(-42, 16))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

b10 := []byte("uint (base 10):")
b10 = strconv.AppendUint(b10, 42, 10)
fmt.Println(string(b10))
// uint (base 10):42 b16 := []byte("uint (base 16):")
b16 = strconv.AppendUint(b16, 42, 16)
fmt.Println(string(b16))
// uint (base 16):2a

strconv.CanBackquote(s string) bool

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

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

strconv.FormatBool(b bool) string

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

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

strconv.FormatUint(i uint64, base int) string

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

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

strconv.IsPrint(r rune) bool

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

c := strconv.IsPrint('\u263a')
fmt.Println(c)
// true bel := strconv.IsPrint('\007')
fmt.Println(bel)
// false

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

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

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

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

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

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

strconv.Quote(s string) string

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

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

strconv.QuoteRune(r rune) string

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

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

strconv.QuoteRuneToASCII(r rune) string

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

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

strconv.QuoteToASCII(s string) string

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

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

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

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

s, err := strconv.Unquote("You can't unquote a string without quotes")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax
s, err = strconv.Unquote("\"The string must be either double-quoted\"")
fmt.Printf("%q, %v\n", s, err)
// "The string must be either double-quoted", <nil>
s, err = strconv.Unquote("`or backquoted.`")
fmt.Printf("%q, %v\n", s, err)
// "or backquoted.", <nil>
s, err = strconv.Unquote("'\u263a'") // single character only allowed in single quotes
fmt.Printf("%q, %v\n", s, err)
// "☺", <nil>
s, err = strconv.Unquote("'\u2639\u2639'")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax

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

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

v, mb, t, err := strconv.UnquoteChar(`\"Fran & Freddie's Diner\"`, '"')
if err != nil {
log.Fatal(err)
} fmt.Println("value:", string(v))
// value: "
fmt.Println("multibyte:", mb)
// multibyte: false
fmt.Println("tail:", t)
// 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. 内置模块之sys

    一.模块sys sys模块主要对解释器相关的操作 1.常用方法和属性 sys.argv    命令行参数List,第一个元素是程序本身路径 sys.exit(n)  退出程序,正常退出时exit(0) ...

  2. 深入浅出VisualStudio——使用NuGet来安装AjaxControlToolKit

    使用NuGet可以加速配置Visual Studio 2010的开发环境. 1.创建一个空的ASP.NET web站点项目. 2.右键单击此web 站点,选择Manage NuGet Packages ...

  3. August 31st 2017 Week 35th Thursday

    Whatever happened in the past is gone, the best is always yet to come. 无论过去发生什么,最好的永远尚未到来. Correct j ...

  4. 链表回文判断(基于链表反转)—Java实现

    学习数据结构的时候遇到一个经典的回文链表问题 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 如果有链表反转的基础,实现链表回文判断就简单的多,如 ...

  5. 导出当前域内所有用户hash的技术整理

    0x00目标: 导出当前域内所有用户的hash 0x01测试环境: 域控:server2008 r2 杀毒软件:已安装* 域控权限:可使用net use远程登陆,不使用3389 0x02测试方法: ( ...

  6. JavaScript的事件概述以及事件对象,事件流

    事件处理程序 JavaScript 事件对象是由访问 Web 页面的用户引起的一系列操作,例如:用户点击页面上的某个按钮或者鼠标移动到页面的某个图片上而产生一系列的互动的反馈. 我们通过为指定事件绑定 ...

  7. CSS样式命名规则

    1.样式命名外 套: wrap主导航: mainnav子导航: subnav页 脚: footer整个页面: content页 眉: header页 脚: footer商 标: label标 题: t ...

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

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

  9. 【[SDOI2014]数数】

    被慎老师教育数位\(dp\)怎么写了 看来我数位\(dp\)的写法太落后了 这道题很显然就是一个\(AC\)自动机上的数位\(dp\),按照套路 我们可以设计\(dp[i][j][0/1]\)表示匹配 ...

  10. P1081 开车旅行

    题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...