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 转换过程中可能得错误

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

  1. 超出目标类型的表示范围
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
  1. 不符合目标类型语法
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 - 基本数据类型和其字符串表示之间转换的更多相关文章

  1. HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换

    1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...

  2. [转] HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换

    1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...

  3. python 在Unicode和普通字符串 str 之间转换

    unicodestring = u"Hello world" # 将Unicode转化为普通Python字符串:"encode" utf8string = un ...

  4. SSIS无法在unicode和非unicode 字符串数据类型之间转换

    场景:SSIS从oracle抽到sqlserver,一个表对表到数据仓库ODS层的抽取,没有任何逻辑结果遇到问题: SSIS无法在unicode和非unicode 字符串数据类型之间转换 如下图2个字 ...

  5. SSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换

    最近在学SSIS,遇到一个问题,把平面文件源的数据导入到EXCEL中. 平面文件源的对象是CSV,读进来的PhoneNumber是 DT_STR 然后倒入Excel 对应列建立的是longtext 一 ...

  6. 基本数据类型、包装类、String之间的转换

    package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...

  7. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  8. Python基础4:数据类型:数字 字符串 日期

    [ Python 数据类型 ] 我们知道,几乎任何编程语言都具有数据类型:常见的数据类型有:字符串.整型.浮点型以及布尔类型等. Python也不例外,也有自己的数据类型,主要有以下几种: 1.数字: ...

  9. 有两个地方,用到了javabean对象和属性字符串值之间的转换

    1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...

  10. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

随机推荐

  1. 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 多链接实验,也称为Split url实验,用户根据分流结果访问不同版本的url. 举个例子: 当您有两 ...

  2. 如何在 EF Core 中使用乐观并发控制

    什么是乐观并发控制? 乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低.在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时, ...

  3. JSP | JavaBean 的基本使用方法与 IDEA 配置

    上一篇重新编写了 IDEA 2021.2 新建JavaWeb项目及Tomcat部署, 接下来的本篇文章才是核心,JavaBean的基本使用方法与 IDEA 配置 JavaBean概述 JavaBean ...

  4. # 0x56 动态规划-状态压缩DP

    0x56 动态规划-状态压缩DP Mondriaan's Dream Description Squares and rectangles fascinated the famous Dutch pa ...

  5. 为什么 Serverless 能提升资源利用率?

    木吴|阿里云智能高级技术专家 业务的负载往往不是一成不变的,而是随着时间呈现一定的上下波动.传统的应用构建方式一般是备足充分的资源以保障业务可用性,造成资源利用率不高的现象.随着容器技术的普及,应用可 ...

  6. VueRouter和ReactRouter路由对比

    https://blog.csdn.net/xinxin_csdn/article/details/124652160

  7. 区分开发环境和生产环境webpack

  8. spring boot 中默认最大线程连接数,线程池数配置查看

    本文为博主原创,转载请注明出处: 可以查看 AbstractEndpoint  源码中的常量的定义: public abstract class AbstractEndpoint<S, U> ...

  9. Mongo库表占用空间统计

    1. 背景 DBA同事反馈说Mongp集群磁盘占用空间过大,超过监控告警95%阈值,因此建议删除部分资源或者申请扩容,本着开源节流的理念,还是乖乖看哪些老数据应该删除.但Mongo中的库和表过多,因此 ...

  10. Linux系统下安装JDK8和Maven3.8.5

    一.下载JDK8Linux版本 官网下载太慢了,小编这里为大家下载好了: 链接:百度网盘地址 提取码:ov24 二.下载Maven maven3.8.5下载链接 三.使用xftp上传到linux上 四 ...