首页 > 其他分享 >7.GoLang中基本数据类型之间的转换

7.GoLang中基本数据类型之间的转换

时间:2024-03-23 09:11:29浏览次数:22  
标签:转换 string strs fmt 数据类型 GoLang 类型 Printf var

GoLang 中基本数据类型之间的转换

1、关于 golang 中的数据类型转换

Go 语言中只有强制类型转换,没有隐式类型转换。

2、数值类型之间的相互转换

数值类型包括:整形和浮点型

package main

import "fmt"

func main() {
    var a int8 = 20
    var b int16 = 40
    var c = int16(a) + b //要转换成相同类型才能运行
    fmt.Printf("值:%v--类型%T", c, c) //值:60--类型 int16
}
package main

import "fmt"

func main() {
    var a float32 = 3.2
    var b int16 = 6
    var c = a + float32(b)
    fmt.Printf("值:%v--类型%T", c, c) //值:9.2--类型 float32
}

转换的时候建议从低位转换成高位,高位转换成低位的时候如果转换不成功就会溢出,和我们想的结果不一样。

比如:

package main

import "fmt"

func main() {
    var a int16 = 129
    var b = int8(a) // 范围 -128 到 127
    println("b=", b) //b= -127 //错误
}

比如计算直角三角形的斜边长时使用 math 包的 Sqrt()函数,该函数接收的是 float64 类型的参数,而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型。

var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是 float64 类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)

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

3.1、sprintf 把其他类型转换成 string 类型

注意:sprintf 使用中需要注意转换的格式

  • int 为%d

  • float 为%f

  • bool 为%t

  • byte 为%c

package main

import "fmt"

func main() {
    var i int = 20
    var f float64 = 12.456
    var t bool = true
    var b byte = 'a' var strs string
    strs = fmt.Sprintf("%d", i)
    fmt.Printf("str type %T ,strs=%v \n", strs, strs)
    strs = fmt.Sprintf("%f", f)
    fmt.Printf("str type %T ,strs=%v \n", strs, strs)
    strs = fmt.Sprintf("%t", t)
    fmt.Printf("str type %T ,strs=%v \n", strs, strs)
    strs = fmt.Sprintf("%c", b)
    fmt.Printf("str type %T ,strs=%v \n", strs, strs)
}
输出:
d:\golang\src\demo01>go run main.go
str type string ,strs=20
str type string ,strs=12.456000
str type string ,strs=true
str type string ,strs=a

3.2、使用 strconv 包里面的几种转换方法进行转换

package main

import ( 
	"fmt"
	"strconv"
)

func main() {
    //1、int 转换成 string
    var num1 int = 20
    s1 := strconv.Itoa(num1)
    fmt.Printf("str type %T ,strs=%v \n", s1, s1)
    // 2、float 转 string
    var num2 float64 = 20.113123
	/* 	参数 1:要转换的值
		参数 2:格式化类型
        'f'(-ddd.dddd)、
        'b'(-ddddp±ddd,指数为二进制)、
        'e'(-d.dddde±dd,十进制指数)、
        'E'(-d.ddddE±dd,十进制指数)、
        'g'(指数很大时用'e'格式,否则'f'格式)、
        'G'(指数很大时用'E'格式,否则'f'格式)。
        参数 3: 保留的小数点 -1(不对小数点格式化)
        参数 4:格式化的类型
    */
    s2 := strconv.FormatFloat(num2, 'f', 2, 64)
    fmt.Printf("str type %T ,strs=%v \n", s2, s2)

    // 3、bool 转 string
    s3 := strconv.FormatBool(true)
    fmt.Printf("str type %T ,strs=%v \n", s3, s3)

    //4、int64 转 string
    var num3 int64 = 20

    /*
    * 第二个参数为 进制
    */
    s4 := strconv.FormatInt(num3, 10)
    fmt.Printf("类型 %T ,strs=%v \n", s4, s4)
}

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

4.1、string 类型转换成 int 类型

var s = "1234"
i64, _ := strconv.ParseInt(s, 10, 64)
fmt.Printf("值:%v 类型:%T", i64, i64)

4.2、string 类型转换成 float 类型

str := "3.1415926535" 
v1, _ := strconv.ParseFloat(str, 32)
v2, _ := strconv.ParseFloat(str, 64)
fmt.Printf("值:%v 类型:%T\n", v1, v1)
fmt.Printf("值:%v 类型:%T", v2, v2)

4.3、string 类型转换成 bool 类型(意义不大)

b, _ := strconv.ParseBool("true") // string 转 bool
fmt.Printf("值:%v 类型:%T", b, b)

4.4、string 转字符

s := "hello 张三"
for _, r := range s { //rune
	fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()

4.5、数值类型没法和 bool 类型进行转换

注意:在 go 语言中数值类型没法直接转换成 bool 类型 bool 类型也没法直接转换成数值类型

标签:转换,string,strs,fmt,数据类型,GoLang,类型,Printf,var
From: https://www.cnblogs.com/happyhuangjinjin/p/18090775

相关文章

  • C# 03 数据类型及转换
    类型:integer(int)、double、long:数値型string:文字型boolean:布尔型写法:inti=int.Parse("1234");longl=long.Parse("1234");doubled=double.Parse("124.3");boolb=bool.Parse("True");stringstr=i.ToString(); 时间Da......
  • tcp/ip网络通信时的大小端序转换
    1.短整形/长整形的转换#include<arpa/inet.h>//u:unsigned//16:16位,32:32位//h:host,主机字节序//n:net,网络字节序//s:short//l:int//这套api主要用于网络通信过程中IP和端口的转换//将一个短整形从主机字节序->网络字节序uint16_thtons(......
  • 将秒转换成天时分秒格式
    deftimestamp_difference_to_dhms(timestamp1,timestamp2):#将时间戳转换为datetime对象##13位时间戳会报错iflen(str(timestamp1))==13:timestamp1=timestamp1/1000iflen(str(timestamp2))==13:timestamp2=timestamp2......
  • C语言中,四则运算导致数据类型的转换
    在C语言中,四则运算可能导致数据类型的转换,这种转换称为隐式类型转换。以下是一些常见的数据类型转换情况:1.整数提升:当不同大小的整数类型(如`char`、`short`、`int`、`long`)进行混合运算时,较小的操作数会被提升为较大的类型,以便进行运算。例如,`char`类型的操作数会被提升为`......
  • 前端基础 - 数据类型篇(高频面试!!!)
    数据类型在JavaScript中,数据类型可以分为两类:基础数据类型、引用/复杂数据类型1.基础类型:String->表示文本类型,如"HelloWorld!"Number->表示数字,可以是整数或者浮点数,例如3或者3.141592,在JavaScript中,所有数字都是浮点数类型,即使没有小数部分Boolean->表示......
  • JAVA对象、类和基本数据类型
    变量和标识符数学名词:变数或变量,是指没有固定的值,可以改变的数。变量以非数字的符号来表示,一般用拉丁字母。变量和常数是相反的。变量的用处在于能一般化描述指令的方式计算机解释:变量就是系统为程序分配的一块内存单元,用来储存各种类型的数据。根据所储存的数据类型不同,有......
  • JAVA基本数据类型转换、关键字、转义字符
    基本数据类型转换自动类型转换:容量小的类型自动转换成容量大的数据类型byte,short,它们在计算时会转换int类型如果把int转换成float值,或者long转换成double值,不需要强制转换,但可能丢失精度publicclassMain{publicstaticvoidmain(String[]args){byteb......
  • 自定义转换器实现案例
    Spring中自定义转换器实现案例1自定义转换器code如下:packagecom.gientech.selfConvert;importorg.springframework.core.convert.converter.Converter;publicclassStudentConverterimplementsConverter<String,Student>{@OverridepublicStudentconv......
  • [GPT] swoole的协程和golang的协程有什么区别,哪个更好
    Swoole的协程和Golang(Go语言)的协程(Goroutine)在概念上都是为了实现轻量级的并发编程,但它们在具体实现、使用方式和性能特点上有所不同:实现原理:Golang协程(Goroutine):Go语言从语言层面内置了对协程的支持。Goroutine是由Go运行时系统管理的轻量级线程,它基于M:N调度模型......
  • 类型转换问题
    publicclassDemo2{publicstaticvoidmain(String[]args){inti=128;//强制转换高-->低byteb=(byte)i;//自动转换低-->高doublec=i;System.out.println(b);System.out.println(c);/*......