Go_数据类型转换(Sprintf、Format)

2023-11-12

数据类型转换:

  • 类型转换是将一种数据类型的变量转为另一种类型的变量
  • Go强制要求使用显式类型转换。所以语法更能确定语句及表达式的明确含义
  • 转换的时候如果大的转给小的,会有精度损失(数据溢出)比如int64转int8

转换格式:

	// 将v转成T类型,但是v本身的数据类型并不会改变,只是把v变量的值类型转成T
	表达式 T(v) 

演示:

func main() {
	var a int32 = 1999999      // 小转大一样要显示转换
	var b float64 = float64(a) // a转b  a本身数据类型并不会改变,只是把a的值(1999999)转成了float64
	var c int8 = int8(a)       // 大转小不会报错,但是数据溢出会丢失数据
	fmt.Println("c:", c)
	fmt.Printf("a的数据类型是:%T\n  b的数据类型是:%T\n  c的数据类型是:%T\n", a, b, c)
}

输出:

c: 127
a的数据类型是:int32
b的数据类型是:float64
c的数据类型是:int8

转换必须确保类型一致,不能将非bool类型结果当做true/false使用

func main() {
	x := 100
	var b bool = x // 错误:无法将 'x' (类型 int) 用作类型 bool
	if x {         // 非布尔值 'x' (类型 int) 用作条件
	}
}

基本类型转string:

Sprintf():格式化为字符串

Sprintf和printf的区别:printf是将一个格式化的字符串打印到控制台,Sprintf是转换为字符串

参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

格式:

接收变量 = fmt.Sprintf(%格式符,参数列表)

演示:

func main() {
	var (
		num1 int     = 9
		num2 float64 = 9.99
		b    bool    = false
		c    byte    = 'a'
		str  string
	)

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%c", c)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:9
str的类型: string      值:9.990000
str的类型: string      值:false
str的类型: string      值:a
strconv.Format方式:

strconv.Itoa可以将数字转换成字符串类型的数字

func main() {
	var (
		num  int     = 24
		num2 float64 = 1.111
		str  string
	)

	// FormatInt参数1:要转的变量  参数2:进制
	str = strconv.FormatInt(int64(num), 10)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// strconv.FormatInt也可以用来转换进制,比如将10进制转换为2进制,其它进制,换掉后面的数字就可以了
	str = strconv.FormatInt(123, 2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// 'f':格式  10:保留10位   64:float64
	str = strconv.FormatFloat(num2, 'f', 10, 64)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.FormatBool(false)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.Itoa(num) 
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:24
str的类型: string      值:1111011
str的类型: string      值:1.1110000000
str的类型: string      值:false
str的类型: string      值:24

string转基本类型:

将string类型转换成基本数据类型时,要确保string类型能够转成有有效的数据

例:可以把"123"转成int类型,但是不可以将"aaa"转成int类型,编译器不会报错,go会把它变成默认值0,因为go会判断这个值能不能转成有效的数据,如果不可以会按照该数据的数据类型的默认值赋值。

strconv方式:
func main() {
	var (
		str string = "123"
		i   int64  // 这里只能用int64
		f   float64
		b   bool
	)
	// str:字符串	base:进制	bitSize:数据类型
	i, _ = strconv.ParseInt(str, 10, 64)
	fmt.Printf("i的类型: %T\t 值:%v\n ", i, i)

	f, _ = strconv.ParseFloat(str, 64)
	fmt.Printf("f的类型: %T\t 值:%v\n ", f, f)

	b, _ = strconv.ParseBool(str)
	fmt.Printf("b的类型: %T\t 值:%v\n ", b, b)

	s, _ := strconv.Atoi("str")
	fmt.Printf("s的类型: %T\t 值:%v\n ", s, s)
}

输出:

i的类型: int64     值:123
f的类型: float64   值:123
b的类型: bool      值:false
s的类型: int       值:0

字符串转字节切片

func main() {
	// 字符串转切片
	var b = []byte("itzhuzhu")
	fmt.Println("b = ", b)

	// 切片转字符串
	var str = string([]byte{97, 98, 99})
	fmt.Println("str = ", str)
}

输出:

b =  [105 116 122 104 117 122 104 117]
str =  abc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go_数据类型转换(Sprintf、Format) 的相关文章

随机推荐

  • pytest参数化实现DDT:读取JSON数据

    JSON JavaScript Object Notation JS 对象简谱 是一种轻量级的数据交换格式 与上一篇文章类似 使用pytest中的pytest mark parametrize 便可实现参数化 代码如下所示 导入json模块
  • conda新建、复制、删除、重命名envs环境

    1 新建环境 conda create n torch python 3 6 这样就创建好了一个名叫torch的python3 6环境 2 复制环境 conda create n new torch clone torch 这样就将torc
  • 【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 LSTM神经网络算法 1 2 PSO算法 1 3 PSO LSTM负荷预测模型 2 运行结果 2
  • pytorch: 转onnx模型

    摘要 onnx Open Neural Network Exchange 主要用于部署 训练一般使用pytorch和tensorflow 等训练完成 我们需要模型转成onnx 用于部署在云或者边缘计算上 而为什么要要转成onnx模型呢 主要
  • vscode CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.解决

    1 问题出现 已安装anaconda并已添加其环境变量 测试在win cmd中输入conda及相关conda activate命令等都是正常的 但当在vscode中run debug工程py脚本时出现以下错误及提示 2 踩坑记录 1 根据提
  • xterm使用详情

    常用配置项 rendererType dom canvas 渲染器类型 当 canvas 渲染器运行过慢时 会回退为 DOM 渲染器 DOM 渲染器下不起作用的功能 Letter spacing Cursor blin cols numbe
  • word页码怎么从第三页开始设置为第一页_Word小技巧

    在使用word编辑文档或者写论文的时候 会涉及到页码的设置 今天粉笔君就来给大家分享一下如何快速正确的设置页码格式 一 第一页为封面 第二页为目录 从第三页开始编码 1 将鼠标固定到文档第二页的第一个字符前 在菜单栏中单击 布局 选项 找到
  • Java+Servlet+Jsp(el, jstl)+MyBatis的CRUD练习小项目

    1 概述 这篇博客主要是分享一个基于Servlet Jsp el jstl MyBatis的CRUD练习小项目 包括项目的源码 以及项目的逻辑 通过这个项目能够学习Java web中最基础的servlet jsp和mybatis的使用 为后
  • 一篇短文告诉你阿里云用户如何通过等保测评

    随着等保2 0的脚步越来越近 云上等保受到越来越多人的关注 近日在成都举行的云栖大会安全论坛上 牛君特意关注了阿里云云上系统的等保合规方案 阿里云最早于2012年通过 ISO 27001 认证 并于2016年9月通过新的云计算安全等级保护三
  • 点云绪论(点云数据及获取、点云数据处理、常用软件及开源库)

    文章目录 点云数据及获取 点云数据处理 常用软件及开源库 点云数据及获取 定义 点云 point cloud 三维点的数据集合属性 三维坐标 强度 颜色 时间戳 点云组织形式 organized the point cloud is lai
  • BG-20k数据集分析及下载

    包含20000张高清背景图片 包含清晰的对象轮廓 可以用做高质量图像生成的研究 此数据集下载流程繁琐 还需要签保证书获得授权等等 可以联系此人 提供高速下载链接 q 2389411778 备注要bg20k数据集
  • centos7 ping: www.baidu.com: Name or service not known

    转自 https www cnblogs com maowenqiang articles 7727910 html root www ping www baidu comping www baidu com Name or service
  • RPC介绍+原理

    RPC 远程过程调用 它是一种通过网络从远程计算机程序上请求服务 而不需要了解底层网络技术的协议 RPC协议假定某些传输协议的存在 如TCP或UDP 为通信程序之间携带信息数据 在OSI网络通信模型中 RPC跨越了传输层和应用层 RPC采用
  • spingboot热部署,实现jsp页面时时刷新

    SpringBoot默认不支持JSP的实时更新 目前有两种解决方案 解决方法1 在配置文件 手工开启实时编译JSP的功能 application yml 配置如下 server jsp servlet init parameters dev
  • 双目标定(三)标定流程(含矫正)

    1 原理 参见单目标定基本原理 2 采集 2 1标定板的制作 大小 应当使得标定板在图像中占比尽可能大一些 占图像长度比例应当超过1 3 如果实在无法保证标定板占图像比例比较大如果占比比较小 则需要尽可能多采集一些图像 平 标定板应当尽可能
  • 单片机基础——使用USART发送和接收数据(DMA模式)

    1 准备工作 硬件准备 开发板 首先需要准备一个小熊派IoT开发板 并通过USB线与电脑连接 2 生成MDK工程 选择芯片型号 打开STM32CubeMX 打开MCU选择器 搜索并选中芯片STM32L431RCT6 配置时钟源 如果选择使用
  • STM32 标准外设SPL库、硬件抽象层HAL库、低层LL库区别?

    1 STM32 之一 HAL库 标准外设库 LL库 ZC Shou的博客 CSDN博客 ll库 仔细阅读 2 STM32标准外设库 HAL库 LL库 King先生 博客园 3 STM32 之 HAL库 戈 扬的博客 仔细阅读 4 STM32
  • sql: SQLite,MySQL,SQL Server

    SQLite 3 CREATE TABLE DuStudentList StudentId INTEGER PRIMARY KEY AUTOINCREMENT StudentName TEXT NOT NULL StudentNO TEXT
  • Oracle 11Gr1监听报错TNS-12542 12560 00512

    环境 Oracle 11Gr1 Linux Redhat 5 重启机器后 数据库监听启动报错如下 TNS 12542 TNS address already in use TNS 12560 TNS protocol adapter err
  • Go_数据类型转换(Sprintf、Format)

    数据类型转换 类型转换是将一种数据类型的变量转为另一种类型的变量 Go强制要求使用显式类型转换 所以语法更能确定语句及表达式的明确含义 转换的时候如果大的转给小的 会有精度损失 数据溢出 比如int64转int8 转换格式 将v转成T类型