首页 > 其他分享 >go语言数据类型转换

go语言数据类型转换

时间:2024-04-29 13:57:01浏览次数:14  
标签:类型转换 语言 fmt strconv 数值 类型 num Printf go

go语言数据类型转换

golang不会对数据进行隐式的类型转换,只能手动去执行转换操作,表达式T(v)将值v转换为类型T
T : 就是数据类型
V : 就是需要转换的变量

一、数值类型转换

数值间转换的时候建议从小范围转换成大范围,比如int8转int16,大范围转换成小范围的时候,比如int16转int8,会发生精度丢失(截断)的情况,如果转换不成功就会溢出。

1.1、整数间转换

package main
import "fmt"
func main() {
	var a int8 = 6
	var b int16 = 12
	var c = b + 5 //根据b推导出c也是int16
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
	c = int16(a) + b
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
}
	//整数间的数值运算,值:17 ----类型int16
	//整数间的数值运算,值:18 ----类型int16

1.2、浮点数间转换

package main
import "fmt"
func main() {
	var a float32 = 6.1
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", a, a)
	//整数间的数值运算,值:6.1 ----类型float32
	fmt.Printf("整数间的数值运算,值:%.1f ----类型%T\n", a, a)
	//整数间的数值运算,值:6.1 ----类型float32
	var d float64 = float64(a)
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", d, d)
	//整数间的数值运算,值:6.099999904632568 ----类型float64
	var b float64 = 12.1
	var c = float64(a) + b
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
	//整数间的数值运算,值:18.19999990463257 ----类型float64
}

1.3、整数与浮点类型间的转换

func main() {
	var a int = 8
	var b float64 = 12.1
	var c = float64(a) + b
	fmt.Printf("整数和浮点数直接的运算,值:%v ----类型%T\n", c, c)
}

二、其他类型转换成String类型

2.1 fmt.Sprintf()把其他类型转换成String类型

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

package main
import "fmt"
func main() {
	var (
		a int     = 20
		b float64 = 12.456
		c bool    = true
		d byte    = 'a'
	)
	var strA, strB, strC, strD string
	strA = fmt.Sprintf("%d", a)
	strB = fmt.Sprintf("%f", b)
	strC = fmt.Sprintf("%t", c)
	strD = fmt.Sprintf("%c", d)
	fmt.Printf("stra类型是%T,值是%v\n", strA, strA)
	fmt.Printf("strb类型是%T,值是%v\n", strB, strB)
	fmt.Printf("strc类型是%T,值是%v\n", strC, strC)
	fmt.Printf("strd类型是%T,值是%v\n", strD, strD)
}
/*stra类型是string,值是20
strb类型是string,值是12.456000
strc类型是string,值是true
strd类型是string,值是a
*/
// 变量命名方式也是两种

2.2、使用strconv包把其他类型转换成String类型

2.2.1、int 转换成 String 类型
func main() {
	var (
		a    int64 = 20
		strA string
		b    int = 19
	)
	strA = strconv.FormatInt(a, 10)   //方法1
	fmt.Printf("类型%T,数值%v\n", strA, strA)
	strA = strconv.Itoa(b)  //方法2
	fmt.Printf("类型%T,数值%v\n", strA, strA)
}
//strconv.Itoa()等价于strconv.FormatInt()
2.2.2、float 转换成 String 类型
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int)
参数1是要转换的值,需要时float64类型
参数2是格式化的进制类型
    'f' (-ddd.dddd)
    'b' (-ddddp±ddd,指数为二进制)
    'e'(-d.dddde±dd,十进制指数)、
    'E'(-d.ddddE±dd,十进制指数)、
    'g' (指数很大时用'e'格式,否则'f'格式)
    'G' (指数很大时用'E'格式,否则'f'格式)
参数3是保留的小数点数量,设置为 -1 表示不对小数点格式化 ,设置为 3 表示保留三位小数。
参数4是格式化后的类型为int,位数是设置的bitSize,设置64,那就是格式化后的具体类型为int64。
func main() {
	var a float64 = 20.123456
	star01 := strconv.FormatFloat(a, 'f', -1, 64)
	fmt.Printf("类型%T,数值%v\n", star01, star01)
	//类型string,数值20.123456
	star02 := strconv.FormatFloat(a, 'f', 3, 64)
	fmt.Printf("类型%T,数值%v\n", star02, star02)
	//类型string,数值20.123
}
2.2.3、bool 转 String类型
func main() {
	var a bool = true
	str := strconv.FormatBool(a)
	fmt.Printf("类型%T,数值%v\n", str, str)
	//类型string,数值true
	var b bool = false
	str01 := strconv.FormatBool(b)
	fmt.Printf("类型%T,数值%v\n", str01, str01)
	//类型string,数值false
}

三、String类型转换成数值类型

Parse类函数用于转换字符串为给定类型的值:ParseBool()ParseFloat()ParseInt()ParseUint()。由于字符串转换为其它类型可能会失败,所以这些函数都有两个返回值,第一个返回值保存 转换后的值,第二个返回值判断是否转换成功。

3.1、String类型转换成int类型

func main() {
	a := "12"
	num, _ := strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "hello"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12.1"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "-12"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	num01, _ := strconv.ParseUint(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num01, num01)
	a = "-12"
	num02, _ := strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
	a = "12"
	num02, _ = strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
	a = "hello"
	num02, _ = strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
}

/*变量hello,类型int64,数值0
变量12.1,类型int64,数值0
变量-12,类型int64,数值-12
变量12,类型int64,数值12
变量12,类型uint64,数值12
变量-12,类型int,数值-12
变量12,类型int,数值12
变量hello,类型int,数值0
*/

//非数字字符串不可以转换为int类型,浮点字符串也不可以转换为int类型
//ParseInt()可以转换正数和负数,ParseUint()只能转换正数
//strconv.Atoi() 等价于ParseInt()

3.2、String类型转换成float类型

func main() {
	a := "12.123456"
	num, _ := strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12"
	num, _ = strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "hello"
	num, _ = strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
}

/*变量12.123456,类型float64,数值12.123456
变量12,类型float64,数值12
变量hello,类型float64,数值0*/
//非数字字符串不可以转换为float类型

3.3、String类型转换成bool类型

func main() {
	s := "true"
	num, _ := strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "false"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "hello"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "1"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "0"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
}

/*变量true,类型bool,数值true
变量false,类型bool,数值false
变量hello,类型bool,数值false
变量1,类型bool,数值true
变量0,类型bool,数值false*/

标签:类型转换,语言,fmt,strconv,数值,类型,num,Printf,go
From: https://www.cnblogs.com/luspace/p/18165513

相关文章

  • Godot的游戏开发思考(无代码)
    目录前言GDScriptorC#?C#IOC开发代码和引擎的平衡Godot如何学习多而精炼的小Demo后面的学习的方向Ai绘画和Ai声音的学习前言我断断续续学了快半年的Godot了吧,从去年的Unity事件发生之后开始接触,然后断断续续学到了现在,这里就简单讲讲我对Godot的看法GDScriptorC#?GDScript......
  • 实验3 C语言函数应用编程
    1#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn);//函数声明......
  • 【C语言】---- return的作用
    return是C语言中的一个关键字,用于从函数中返回值。它有以下几个作用:1返回值return用于将函数的结果返回给调用者。在函数执行过程中,当遇到return语句时,函数将立即停止执行,并将其后的表达式的值作为函数的返回值返回给调用者。例如:```cintadd(inta,intb){return......
  • Go-Zero从0到1实现微服务项目开发(二)
    前言书接上回,继续更新GoZero微服务实战系列文章。上一篇被GoZero作者万总点赞了,更文动力倍增,也建议大家先看巧一篇,欢迎粉丝股东们三连支持一波:Go-zero微服务快速入门和最佳实践(一)本文将继续使用Go-zero提供的工具和组件,从零开始逐步构建一个基本的微服务项目。手把手带你完......
  • C语言常量
    多种方式定义常量 常量没有数据类型。#include<stdio.h>#defineZERO0#definePI3.1415intmain(){//1.字面常量3.14;//字面常量1000;//字面常量//2.#defineprintf("zero=%d\n",ZERO);//ZERO=1;//不可以重新赋值/......
  • Redis中对数组的获取类型转换
    1#####Redis中对数组的获取类型转换23```java4//判断redis中键值key是否存在;5BooleancarWeizi_redis_service=redisService.hasKey("carWeizi_redis_service");6if(carWeizi_redis_service){7//获取对应的list数组传入时re......
  • Asp .Net Core 系列:国际化多语言配置
    目录概述术语本地化器IStringLocalizer在服务类中使用本地化IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer资源文件区域性回退配置CultureProvider内置的RequestCultureProvider实现自定义RequestCultureProvider使用Json资源文件设计原理IStringLocalizerFactory&......
  • 【C语言】---- 数组
    在计算机编程中,数组是一种非常重要的数据结构,它可以用来存储多个相同类型的数据。在本文中,我们将深入探讨一维数组和二维数组,它们的定义、特性以及在编程中的应用。一维数组一维数组是最简单的数组形式之一,它是一组按顺序排列的元素的集合,每个元素都有一个唯一的索引。在C语言中......
  • go generate ./... 含义
     gogenerate./...是一个Go语言中的命令,用于在编译前自动执行代码生成任务。这个命令会遍历当前包及其子包中的所有源代码文件,查找所有包含特殊注释//go:generate的行。这些注释后面跟着的是应该执行的命令,用于生成额外的源代码、元数据或其他编译时所需的文件。执行g......
  • golang中的ORM框架
    目录ORM框架GORM基本用法1.安装GORM2.连接数据库3.定义模型4.执行CRUD操作5.迁移和查询ORM框架在Golang中,ORM(Object-RelationalMapping,对象关系映射)框架是一种用于将面向对象的概念与关系型数据库中的表进行映射的工具。通过使用ORM框架,开发者可以更方便地执行数据库操......