Go 基本数据类型与字符串相互转换方法小结

 更新时间:2024年01月28日 09:29:56   作者:@子非鱼  
这篇文章主要介绍了Go基本数据类型与字符串相互转换,将string类型转换成基本类型时,必须确保string类型是有效的,文中补充介绍了Go基本数据类型和其字符串表示之间转换,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下

Go 基本数据类型与字符串相互转换

go语言中文文档:

Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国Go语言文档中文版,Go语言中文网,中国 Golang 社区,Go语言学习园地,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。

https://studygolang.com/pkgdoc

1.基本类型转换成字符串(string)

fmt.Sprintf方法

fmt.Sprintf("%参数", 表达式)

注意:

  • 参数需要和表达式的数据类型相匹配
  • fmt.Sprintf()转换后返回字符串结果
func main() {
    var num1 int = 99
    var num2 float64 = 23.55
    var b bool = true
    var mych byte = 'd'
    var st = string  // 空的string
    // 转化成string
    str = fmt.Sprintf("%d", num1)
    str = fmt.Sprintf("%f", num2)
    str = fmt.Sprintf("%t", b)
    str = fmt.Sprintf("%c", mych)
}

strconv包

package main
import (
    "fmt"
    "strconv"
)
func main() {
    var num1 int = 99
    var num2 float64 = 23.55
    var b bool = true
    var mych byte = 'd'
    var st = string  // 空的string
    str = strconv.FormatInt(int64(num1), 10)  // 转出10进制字符串
    fmt.Printf("type: %T, str: %q\n", str, str)  // 格式化输出
    // "f" 转换成浮点型数据后的一种表示格式,详见文档
    // 10 精度
    // 64 转换成float64
    str = strconv.FormatFloat(num2, "f", 10, 64)  // 
    str = strconv.FormatBool(b)  // 转出布尔类型字符串
    // 将整型变量转换成字符串,特例函数
    var num3 int = 333
    str = strconv.Itoa(num3)   // 这里num3为int型,如果不是需要先显示转换
}

2.字符串转换成基本数据类型 strconv包

func main() {
    // 布尔类型转换
    var str string = "true"
    var b bool 
    b, _ = strconv.ParseBool(str)
    // 整型转换
    var str2 string = "232"
    var n int64
    var n2 int
    // 10 转换成10进制
    // 0、8、16、32、64 分别代表 int、int8、int16、int32、int64
    n, _ = strconv.ParseInt(str2, 10, 64)
    n2 = int(n)  // 获取int类型的值,显示转换
    // 浮点型转换
    var str3 string = "22.33"
    var f float64
    f, _ = strconv.ParseFloat(str3, 64)
}

注意:

将string类型转换成基本类型时,必须确保string类型是有效的;如果是无效值则会转换成功,但是转换后的值为基本类型的默认值。例如不能把"ddd"转换成一个整数,如果这样做,golang直接将其转换成0

补充:

Go - 基本数据类型和其字符串表示之间转换

1. 基本数据类型和其字符串表示之间转换

基本类型的值,都有一个字符串表示,如数字类型值1 字符串表示为 "1",字符的编码为Unicode或者UTF-8,数字的编码是 int,底层存储的数据格式本质上不一样,基本类型的转换本质上只是文法语义上的转化

1.1 Go 语言基本类型

  • 整数 : 有符号int int8 int16 int32 int64 无符号: uint uint8 uint16 uint32 uint64
  • 小数:float32 flat63
  • 字符串: string

1.2 转换过程中可能得错误

基本数据类型到字符串表示的转换,不会出错,但字符表示到基本类型的转换可能会有以下错误

  • 超出目标类型的表示范围
package main
import (
	"fmt"
	"strconv"
)
func main() {
	numStr := "400"
	// 400 数字值已经超出int8(-128, 127)类型表示的范围
	num, err := strconv.ParseInt(numStr, 10, 8)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("conv result:", num)
}
// 输出:strconv.ParseInt: parsing "400": value out of range
  • 不符合目标类型语法
package main
import (
	"fmt"
	"strconv"
)
func main() {
	numStr := "xx"
	// xx字符串值无法表示为对应的整数值
	num, err := strconv.ParseInt(numStr, 10, 8)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("conv result:", num)
}
// 输出:strconv.ParseInt: parsing "400": value out of range

2. 转换

  • 字符串与带引号之间转化
package main
import (
	"fmt"
	"strconv"
)
func main() {
	name := "dream_fish n"
	// 添加上引号
	fmt.Println("result:", strconv.Quote(name))
	// 去除引号
	school := `"University"`
	school_, err := strconv.Unquote(school)
	if err != nil {
		fmt.Println("err:", err)
		return
	}
	fmt.Println("result:", school_)
}
  • 字符串与布尔类型之间的转换

字符串转bool类型

package main
import (
	"fmt"
	"strconv"
)
func main() {
	// 包含所有可以转bool类型的值
	boolStringValues := []string{"1", "0", "t", "f", "true", "false", "True", "False"}
	// 进行转换
	for _, b := range boolStringValues {
		result, err := strconv.ParseBool(b)
		if err != nil {
			fmt.Printf("parse value: %s err:%s\n", b, err)
			continue
		}
		fmt.Printf("parse value: %s err:%s\n", b, result)
	}
}

bool类型转字符串

package main
import (
	"fmt"
	"strconv"
)
func main() {
	// 包含布尔类型的值
	boolValues := []bool{false, true}
	// 进行转换
	for _, b := range boolValues {
		result := strconv.Quote(strconv.FormatBool(b))
		fmt.Printf("format value: %t err:%s\n", b, result)
	}
}
  • 数值与字符串之间的转换

字符串转数值

package main
import (
	"fmt"
	"strconv"
)
func main() {
	// 转换为 int8类型
	int8String := "122"
	// 第一个参数是需要转换的字符串,第二个参数是int类型的进制,第三个参数是bit位数
	intNum, err := strconv.ParseInt(int8String, 10, 8)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("int8 num:", intNum)
	// 字符串正整数
	uintNum, err := strconv.ParseUint(int8String, 10, 8)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("uint8 num:", uintNum)
	// 字符串转浮点数
	floatNumStr := "67.9"
	floatNum, err := strconv.ParseFloat(floatNumStr, 64)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("float64 num:", floatNum)
}

数值转字符串

  • strconv包的Format系列方式
package main
import (
	"fmt"
	"strconv"
)
func main() {
	// 整肃转字符串
	intNum := int64(8)
	fmt.Printf("%s\n", strconv.FormatInt(intNum, 10))
	// 浮点数转字符串
	result := strconv.FormatFloat(88.9, 'f', 2, 64)
	fmt.Println("float to str:", result)
	// bool类型转字符串
	fmt.Println("bool to str:", strconv.FormatBool(true))
	// 无符号整肃
	fmt.Println("uint to str", strconv.FormatUint(111, 10))
}
  • fmtSprint系列方式
package main
import (
	"fmt"
)
func main() {
	// 整肃转字符串
	intValue := int64(8)
	boolValue := true
	floatValue := 44.2
	uintValue := 33
	result := fmt.Sprintf("int: %d, bool: %t, float: %f, unit: %d", intValue, boolValue, floatValue, uintValue)
	fmt.Printf(result)
}
  • strconv包的AtoiItoa方法,其实是 ParseInt(s, 10, 0) FormatInt(i, 10)的简写
package main
import (
	"fmt"
	"strconv"
)
func main() {
	// int类型值转换为字符串
	result := strconv.Itoa(100)
	fmt.Println(result)
	// 字符串值换换为int类型的值
	intString := "200"
	intValue, err := strconv.Atoi(intString)
	if err != nil {
		panic(err)
	}
	fmt.Println(intValue)
}

3. Append系方法

添加转成基本类型转换成字符串表示的

package main
import (
	"fmt"
	"strconv"
)
func main() {
	// 基础数据类型
	intValue := int64(100)
	boolValue := true
	floatValue := 5.4
	buf := []byte("result:")
	resultValue := strconv.AppendFloat(buf, floatValue, 'f', 2, 64)
	fmt.Println(string(resultValue))
	resultValue = strconv.AppendInt(buf, intValue, 10)
	fmt.Println(string(resultValue))
	resultValue = strconv.AppendBool(buf, boolValue)
	fmt.Println(string(resultValue))
}

4. 总结

  • Parse系列方法,将字符串表示尝试转换为基础类型,Formation系列方法将基本类型转换为字符串表示,Append方法是一个将基本类型的字符串表示添加到字节切片的快捷方式

到此这篇关于Go 基本数据类型与字符串相互转换方法小结的文章就介绍到这了,更多相关go基本数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文教你Golang如何正确关闭通道

    一文教你Golang如何正确关闭通道

    Go在通道这一块,没有内置函数判断通道是否已经关闭,也没有可以直接获取当前通道数量的方法,因此如果对通道进行了错误的使用,将会直接引发系统 panic,这是一件很危险的事情,下面我们就来学习一下如何正确关闭通道吧
    2023-10-10
  • Go语言包和包管理详解

    Go语言包和包管理详解

    这篇文章主要为大家介绍了Go语言包和包管理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Go语言的type func()用法详解

    Go语言的type func()用法详解

    在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句,这篇文章主要介绍了Go语言的type func()用法,需要的朋友可以参考下
    2022-03-03
  • Go 语言简单实现Vigenere加密算法

    Go 语言简单实现Vigenere加密算法

    这篇文章主要介绍了Go语言简单实现Vigenere加密算法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • Go 语言入门学习之正则表达式

    Go 语言入门学习之正则表达式

    这篇文章主要介绍了Go 语言入门学习之正则表达式,文章基于GO语言的相关资料展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 关于Go你不得不知道的一些实用小技巧

    关于Go你不得不知道的一些实用小技巧

    开发语言上Go成为高并发业务开发的主流语言,再加上云原生技术底座的驱动,Go语言风光无限,下面这篇文章主要给大家介绍了关于Go你不得不知道的一些实用小技巧,需要的朋友可以参考下
    2022-11-11
  • 深入理解Go语言中接口的使用

    深入理解Go语言中接口的使用

    在现代编程语言中,接口是不可或缺的一个重要特性,这篇文章将为大家详细介绍Go语言中的接口,从而能够更好得使用Go语言,需要的可以参考一下
    2023-06-06
  • GO中的slice使用简介(源码分析slice)

    GO中的slice使用简介(源码分析slice)

    slice(切片)是go中常见和强大的类型,这篇文章不是slice使用简介,从源码角度来分析slice的实现,slice的一些迷惑的使用方式,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • Go语言copy()实现切片复制

    Go语言copy()实现切片复制

    本文主要介绍了Go语言copy()实现切片复制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 浅谈go中defer的一个隐藏功能

    浅谈go中defer的一个隐藏功能

    这篇文章主要介绍了浅谈go中defer的一个隐藏功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论