hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

go言语数据类型转换教程_后端开发

2020-01-01后端开发ki4网31°c
A+ A-

Go不会对数据举行隐式的范例转换,只能手动去实行转换操纵。下面我们来看一下go言语中举行数据范例转换的要领 。

简朴的转换操纵

转换数据范例的体式格局很简朴。

valueOfTypeB = typeB(valueOfTypeA)

比方:

// 浮点数
a := 5.0

// 转换为int范例
b := int(a)

Go许可在底层构造雷同的两个范例之间互转。比方:

// IT范例的底层是int范例
type IT int

// a的范例为IT,底层是int
var a IT = 5

// 将a(IT)转换为int,b现在是int范例
b := int(5)

// 将b(int)转换为IT,c现在是IT范例
c := IT(b)

但注重:

1、不是一切数据范例都能转换的,比方字母花样的string范例"abcd"转换为int 肯定会失利

2、低精度转换为高精度时是平安的,高精度的值转换为低精度时会丧失精度。比方int32转 换为int16,float32转换为int

3、这类简朴的转换体式格局不能对int(float)和string举行互转,要跨大范例转换,能够运用 strconv包供应的函数

strconv

strconv包供应了字符串与简朴数据范例之间的范例转换功用。能够将简朴范例转换为字符 串,也能够将字符串转换为别的简朴范例。

这个包里供应了许多函数,也许分为几类:

1、字符串转int:Atoi()

2、int转字符串: Itoa()

3、ParseTP类函数将string转换为TP范例:ParseBool()、ParseFloat()、ParseInt()、 ParseUint()。因为string转别的范例大概会失利,所以这些函数都有第二个返回值示意是不是转 换胜利

4、FormatTP类函数将别的范例转string:FormatBool()、FormatFloat()、FormatInt()、 FormatUint()

5、AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()

另有其他一些基础用不上的函数,见官方手册:go doc strconv或许 https://golang.org/pkg/strconv/。

当有些范例没法转换时,将报错,返回的毛病是strconv包中自行定义的error范例。有两种 毛病:

var ErrRange = errors.New("value out of 

range")
var ErrSyntax = errors.New("invalid syntax")

比方,运用Atoi("a")将"a"转换为int范例,自然是不胜利的。假如 print输出err信息,将显现:

strconv.Atoi: parsing "a": invalid 

syntax

string和int的转换

最常见的是字符串和int之间的转换:

1.int转换为字符串:Itoa()

// Itoa(): int -> string
println("a" + strconv.Itoa(32))  // a32

2.string转换为int:Atoi()

func Atoi(s string) (int, error)

因为string大概没法转换为int,所以这个函数有两个返回值:第一个返回值是转换成int的 值,第二个返回值推断是不是转换胜利。

// Atoi(): string -> int
i,_ := strconv.Atoi("3")
println(3 + i)   // 6
// Atoi()转换失利
i,err := strconv.Atoi("a")
if err != nil {
    println("converted failed")
}

Parse类函数

Parse类函数用于转换字符串为给定范例的值:ParseBool()、ParseFloat()、ParseInt()、 ParseUint()。

因为字符串转换为别的范例大概会失利,所以这些函数都有两个返回值,第一个返回值保留 转换后的值,第二个返回值推断是不是转换胜利。

b, err := strconv.ParseBool("true")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)

ParseFloat()只能吸收float64范例的浮点数。

ParseInt()和ParseUint()有3个参数:

func ParseInt(s string, base int, bitSize int) 

(i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

bitSize参数示意转换为何位的int/uint,有效值为0、8、16、32、64。当bitSize=0的时 候,示意转换为int或uint范例。比方bitSize=8示意转换后的值的范例为int8或uint8。

base参数示意以什么进制的体式格局去剖析给定的字符串,有效值为0、2-36。当base=0的时刻 ,示意依据string的前缀来推断以什么进制去剖析:0x开头的以16进制的体式格局去剖析,0开头的 以8进制体式格局去剖析,别的的以10进制体式格局剖析。

以10进制体式格局剖析"-42",保留为int64范例:

i, _ := strconv.ParseInt("-42", 10, 

64)

以5进制体式格局剖析"23",保留为int64范例:

i, _ := strconv.ParseInt("23", 5, 64)
println(i)    // 13

因为5进制的时刻,23示意进位了2次,再加3,所以对应的十进制数为5*2+3=13。

以16进制剖析23,保留为int64范例:

i, _ := strconv.ParseInt("23", 16, 64)
println(i)    // 35

因为16进制的时刻,23示意进位了2次,再加3,所以对应的十进制数为16*2+3=35。

以15进制剖析23,保留为int64范例:

i, _ := strconv.ParseInt("23", 15, 64)
println(i)    // 33

因为15进制的时刻,23示意进位了2次,再加3,所以对应的十进制数为15*2+3=33。

Format类函数

将给定范例花样化为string范例:FormatBool()、FormatFloat()、FormatInt()、 FormatUint()。

s := strconv.FormatBool(true)
s := strconv.FormatFloat(3.1415, 'E', -1, 64)
s := strconv.FormatInt(-42, 16)
s := strconv.FormatUint(42, 16)

FormatInt()和FormatUint()有两个参数:

func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string

第二个参数base指定将第一个参数转换为若干进制,有效值为2<=base<=36。当指定 的进制位大于10的时刻,超越10的数值以a-z字母示意。比方16进制时,10-15的数字离别运用 a-f示意,17进制时,10-16的数值离别运用a-g示意。

比方:FormatInt(-42, 16)示意将-42转换为16进制数,转换的效果为-2a。

FormatFloat()参数浩瀚:

func FormatFloat(f float64, fmt byte, prec, 

bitSize int) string

bitSize示意f的泉源范例(32:float32、64:float64),会据此举行舍入。

fmt示意花样:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制) 、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、 'g'(指数很大时用'e'花样,不然'f'花样)、'G'(指数很 大时用'E'花样,不然'f'花样)。

prec掌握精度(消除指数部份):对'f'、'e'、'E',它示意小 数点后的数字个数;对'g'、'G',它掌握总的数字个数。假如prec 为-1,则 代表运用起码数目的、但又必须的数字来示意f。

Append类函数

AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()。

Append类的函数和Format类的函数工作体式格局相似,只不过是将转换后的效果追加到一个 slice中。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 声明一个slice
    b10 := []byte("int (base 10):")
    
    // 将转换为10进制的string,追加到slice中
    b10 = strconv.AppendInt(b10, -42, 10)
    fmt.Println(string(b10))

    b16 := []byte("int (base 16):")
    b16 = strconv.AppendInt(b16, -42, 16)
    fmt.Println(string(b16))
}

输出效果:

int (base 10):-42
int (base 16):-2a

更多golang学问请关注golang教 程栏目。

以上就是go言语数据范例转换教程的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
go言语数据类型转换教程_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>