go类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go类型转换相关的知识,希望对你有一定的参考价值。

参考技术A type_name(expression)
float跟int可以互转,但是会丢失所有精度。

func AppendBool(dst []byte, b bool) []byte
AppendBool 根据 b 的值将“true”或“false”附加到 dst 并返回扩展缓冲区。

func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
AppendFloat 将由 FormatFloat 生成的浮点数 f 的字符串形式附加到 dst 并返回扩展缓冲区。

func AppendInt(dst []byte, i int64, base int) []byte
AppendInt 将由 FormatInt 生成的整数i的字符串形式附加到 dst 并返回扩展缓冲区。

func AppendQuote(dst []byte, s string) []byte
AppendQuote 将由 Quote 生成的代表 s 的双引号 Go 字符串文字附加到 dst 并返回扩展缓冲区。

func AppendQuoteRune(dst []byte, r rune) []byte
AppendQuoteRune 将由 QuoteRune 生成的表示符文的单引号 Go 字符文字附加到 dst 并返回扩展缓冲区。

func AppendQuoteRuneToASCII(dst []byte, r rune) []byte
AppendQuoteRuneToASCII 将由 QuoteRuneToASCII 生成的代表该符文的单引号 Go 字符文字附加到 dst 并返回扩展缓冲区。

func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte
AppendQuoteRuneToGraphic 将由 QuoteRuneToGraphic 生成的表示符文的单引号 Go 字符文字附加到 dst 并返回扩展缓冲区。

func AppendQuoteToASCII(dst []byte, s string) []byte
AppendQuoteToASCII 将由 QuoteToASCII 生成的代表 s 的双引号 Go 字符串文字附加到 dst 并返回扩展缓冲区。

func AppendQuoteToGraphic(dst []byte, s string) []byte
AppendQuoteToGraphic 将由 QuoteToGraphic 生成的代表 s 的双引号 Go 字符串文字附加到 dst 并返回扩展缓冲区。

func AppendUint(dst []byte, i uint64, base int) []byte
AppendUint 将由 FormatUint 生成的无符号整数 i 的字符串形式附加到 dst 并返回扩展缓冲区。

func Atoi(s string) (int, error)
Atoi 返回 ParseInt(s, 10, 0) 转换为 int 类型的结果。

func CanBackquote(s string) bool
CanBackquote 报告字符串 s 是否可以不改变为单行反引号字符串,而不包含 tab 以外的控制字符。

func FormatBool(b bool) string
FormatBool 根据 b 的值返回“true”或“false”

func FormatFloat(f float64, fmt byte, prec, bitSize int) string
FormatFloat 根据格式 fmt 和 precision prec 将浮点数f转换为字符串。它将结果进行四舍五入,假设原始数据是从 bitSize 位的浮点值获得的(float32为32,float64为64)。

格式 fmt 是 'b'(-ddddp±ddd,二进制指数),'e'(-d.dddde±dd,十进制指数),'E'(-d.ddddE±dd,十进制指数),'f'(-ddd.dddd,无指数),'g'('e'表示大指数,'f'表示否则)或 'G'('E'表示大指数,否则'f')。

precision prec 控制由 'e','E','f','g' 和 'G' 格式打印的位数(不包括指数)。对于 'e','E' 和 'f',它是小数点后的位数。对于 'g' 和 'G' 这是总位数。特殊精度-1使用必需的最小位数,以便 ParseFloat 完全返回 f 。

func FormatInt(i int64, base int) string
FormatInt 返回给定基数中的i的字符串表示,对于2 <= base <= 36.结果对于数字值> = 10使用小写字母 'a' 到 'z' 。

func FormatUint(i uint64, base int) string
FormatUint 返回给定基数中的 i 的字符串表示,对于2 <= base <= 36.结果对于数字值> = 10使用小写字母 'a' 到 'z' 。

func IsGraphic(r rune) bool
IsGraphic 报告符文是否被 Unicode 定义为 Graphic。这些字符包括类别 L,M,N,P,S 和 Z 中的字母,标记,数字,标点,符号和空格。

func IsPrint(r rune) bool
IsPrint 报告该符文是否被 Go 定义为可打印,其定义与 unicode.IsPrint 相同:字母,数字,标点,符号和 ASCII 空格。

func Itoa(i int) string
Itoa 是 FormatInt(int64(i), 10) 的缩写。

func ParseBool(str string) (bool, error)
ParseBool 返回字符串表示的布尔值。它接受1,t,T,TRUE,true,True,0,f,F,FALSE,false,False。任何其他值都会返回错误。

func ParseFloat(s string, bitSize int) (float64, error)
ParseFloat 将字符串 s 转换为浮点数,精度由 bitSize:32指定,float32为64; float64为64。当 bitSize = 32时,结果仍然具有 float64 类型,但可以在不更改其值的情况下将其转换为 float32。

如果s格式良好且接近有效的浮点数,则 ParseFloat 返回使用 IEEE754 无偏舍入舍入的最近浮点数。

ParseFloat 返回的错误具有具体类型 * NumError 并包含 err.Num = s。

如果 s 在语法上不是格式良好的,ParseFloat 返回 err.Err = ErrSyntax。

如果 s 在语法上格式良好,但距离给定大小的最大浮点数大于1/2 ULP,则 ParseFloat 返回 f =±Inf,err.Err = ErrRange。

func ParseInt(s string, base int, bitSize int) (i int64, err error)
ParseInt 解释给定基础(2到36)中的字符串 s 并返回相应的值 i。如果 base == 0,则基数由字符串的前缀隐含:base 16代表“0x”,base 8代表“0”,否则以10为底数。

bitSize 参数指定结果必须适合的整数类型。位大小 0,8,16,32 和 64 对应于 int,int8,int16,int32 和 int64。

ParseInt 返回的错误具有具体类型 * NumError 并包含err.Num = s。如果s为空或包含无效数字,则 err.Err = ErrSyntax,返回值为0; 如果与s对应的值不能用给定大小的有符号整数表示,则 err.Err = ErrRange,返回的值是相应 bitSize 和符号的最大幅度整数。

func ParseUint(s string, base int, bitSize int) (uint64, error)
ParseUint 就像 ParseInt,但是对于无符号数字。

func Quote(s string) string
Quote 返回一个双引号的 Go 字符串字面表示s。返回的字符串使用 Go 转义序列 (\t, \n, \xFF, \u0100) 作为 IsPrint 定义的控制字符和非可打印字符。

func QuoteRune(r rune) string
QuoteRune 返回一个表示符文的单引号 Go 字符。返回的字符串使用 Go 转义序列(\t, \n, \xFF, \u0100) 作为 IsPrint 定义的控制字符和非可打印字符。

func QuoteRuneToASCII(r rune) string
QuoteRuneToASCII 返回表示符文的单引号 Go 字符。对于非 ASCII 字符和 IsPrint 定义的非可打印字符,返回的字符串使用 Go 转义序列 (\t, \n, \xFF, \u0100)。

func QuoteRuneToGraphic(r rune) string
QuoteRuneToGraphic 返回代表符文的单引号 Go 字符。对于非 ASCII 字符和 IsGraphic 定义的非可打印字符,返回的字符串使用Go转义序列 (\t, \n, \xFF, \u0100)。

func QuoteToASCII(s string) string
QuoteToASCII 返回一个代表 s 的双引号 Go 字符串。对于非 ASCII 字符和 IsPrint 定义的非可打印字符,返回的字符串使用 Go 转义序列 (\t, \n, \xFF, \u0100) 。

func QuoteToGraphic(s string) string
QuoteToGraphic 返回一个代表 s 的双引号 Go 字符串。对于非 ASCII 字符和 IsGraphic 定义的非可打印字符,返回的字符串使用 Go 转义序列 (\t, \n, \xFF, \u0100)。

func Unquote(s string) (string, error)
Unquote 将 s 解释为单引号,双引号或反引号的 Go 字符串文字,返回引用的字符串值。(如果 s 是单引号,它将是一个 Go 字符字面量; Unquote 会返回相应的一个字符字符串。)

Go语言类型转换

Go语言类型转换

类型转换用于将一种数据类型的变量转换为另外一种类型的变量。

Go语言类型转换基本格式如下:
表达式 T(v) 将值 v 转换为类型 T 。

Go语言各种类型转换及函数的高级用法:
strconv包实现了基本数据类型和其字符串表示的相互转换。

转字节

字符串转字节

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var str string = "oldboy"
    result := []byte(str)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

32位整形转字节

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "reflect"
)

func main() {
    var x int32
    x = 100
    bytesBuffer := bytes.NewBuffer([]byte{})
    binary.Write(bytesBuffer, binary.BigEndian, x)
    result := bytesBuffer.Bytes()
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转字符串

字节转字符串

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var b []byte = []byte{11110810098111121}
    result := string(b)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

整形转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var x int
    x = 100
    result := strconv.Itoa(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

FormatInt 将 int 型整数 i 转换为字符串形式 
base:进位制(2 进制到 36 进制) 大于 10 进制的数,返回值使用小写字母 ‘a’ 到 ‘z’

func FormatInt(i int64, base int) string

Itoa 相当于 FormatInt(i, 10)

64位整形转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var i int64
    i = 0x100
    result := strconv.FormatInt(i, 10)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

布尔值转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    := strconv.FormatBool(true)
    f := strconv.FormatBool(false)
    fmt.Printf("t is %v , t type is %v\n", t, reflect.TypeOf(t))
    fmt.Printf("f is %v , f type is %v\n", f, reflect.TypeOf(f))
}

浮点数转字符串

strconv.FormatFloat(f,fmt,prec,bitSize)
f:要转换的浮点数 
fmt:格式标记(beE、,fgG) 
prec:精度(数字部分的长度,不包括指数部分) 
bitSize:指定浮点类型(32:float32、64:float64

格式标记: 
b’ (-ddddp±ddd,二进制指数) 
e’ (-d.dddde±dd,十进制指数) 
E’ (-d.ddddE±dd,十进制指数) 
f’ (-ddd.dddd,没有指数) 
g’ (‘e’:大指数,’f’:其它情况) 
G’ (‘E’:大指数,’f’:其它情况)
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    := 100.12345678901234567890123456789
    result := strconv.FormatFloat(f, 'e', 30, 32)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转整形

int转int64

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x int = 100
    result := int64(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字符串转整形

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var str string
    str = "100"
    result, _ := strconv.Atoi(str)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字节转32位整形

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "reflect"
)

func main() {
    b := []byte{0x000x000x030xe8}
    bytesBuffer := bytes.NewBuffer(b)

    var result int32
    binary.Read(bytesBuffer, binary.BigEndian, &result)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转浮点型

float32转float64

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x float32 = 100
    result := float64(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

整型转浮点型

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x int = 100
    result := float32(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字符串转浮点数

strconv.ParseFloat(str,bitSize)
str:要转换的字符串
bitSize:指定浮点类型(32:float32、64:float64
如果 str 是合法的格式,而且接近一个浮点值,
则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
如果 str 不是合法的格式,则返回“语法错误”
如果转换结果超出 bitSize 范围,则返回“超出范围”
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var str string = "0.12345678901234567890"
    result, _ := strconv.ParseFloat(str, 32)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转布尔值

字符串转布尔值

ParseBool 将字符串转换为布尔值 
它接受真值:1, t, T, TRUEtrueTrue 
它接受假值:0, f, F, FALSEfalseFalse
其它任何值都返回一个错误
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    result, _ := strconv.ParseBool("1")
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

注意:Go语言不能将其他类型当 bool 值使用。

package main

func main() {
    a := 100
    if a {
    }
}

编译错误:

./main.go:5:2: non-bool a (type int) used as if condition


下一篇:

Go语言切片------敬请期待!

0基础学习Go语言系列:


看完本文有收获?那就分享给更多人吧~

长按二维码

以上是关于go类型转换的主要内容,如果未能解决你的问题,请参考以下文章

GO语言学习(十七)Go 语言类型转换

Golang关于Go中的类型转换

Go基础系列:数据类型转换(strconv包)

Go 数据类型转换

go(golang)中的类型转换

go类型转换