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. 火山引擎DataLeap的Data Catalog系统公有云实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 Data Catalog是一种元数据管理的服务,会收集技术元数据,并在其基础上提供更丰富的业务上下文与语义,通常支 ...

  2. 字节跳动基于ClickHouse优化实践之Upsert

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解,它强大的数据分析性能让人印象深刻.但在字节大量生 ...

  3. Solon2 开发之IoC,十、Bean 在容器的两层信息

    1.剖析 Bean 的装包与注册过程 比如,用配置器装配一个 Bean (本质是装配出一个 BeanWrap,并自动注册到容器): @Configuration public class Config ...

  4. Hugging Face 音频 AI 派对直播回放(上)

    直播回放视频地址:https://www.bilibili.com/video/BV1nh4y1X7zs/?vd_source=c5a5204620e35330e6145843f4df6ea4 为了庆 ...

  5. 【mongodb】pymongo使用

    pymongo基本使用 import pymongo from bson.objectid import ObjectId # 连接方式1 client = pymongo.MongoClient(h ...

  6. BBS项目(一):BBS需求分析 数据表设计 注册登录功能实现

    目录 BBS需求分析 数据表设计 注册页面前端 上传头像 提交数据 FormData 注册后端逻辑 接受参数 验证参数 数据入库 密码加盐操作 返回数据 登录页面前端 生成验证码 前端提交数据 登录后 ...

  7. 在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet

    vue3-in-html 在html中使用vue3,不依赖nodejs和webpack,不依赖脚手架 demo源码 https://gitee.com/s0611163/vue3-in-html 功能 ...

  8. 【每日一题】36. 小AA的数列 (二进制DP)

    补题链接:Here 算法涉及:位运算,DP 这道题想了很久但实在没想什么巧妙的解法,暴力的代码就不放,这里引用Kur1su 的思路 异或问题优先考虑二进制位,对于这个问题,我们需要考虑偶数长度的区间, ...

  9. Python pydot与graphviz库在Anaconda环境的配置

      本文介绍在Anaconda环境中,安装Python语言pydot与graphviz两个模块的方法.   最近进行随机森林(RF)的树的可视化操作,需要用到pydot与graphviz模块:因此记录 ...

  10. 当 Rokid 遇上函数计算

    作者:王彬(阿里云解决方案架构师).姚兰天(Rokid 技术专家).聂大鹏(阿里云高级技术专家) 公司背景和业务 Rokid 创立于2014年,是一家专注于人机交互技术的产品平台公司.Rokid 通过 ...