【Go语言0基础学习之旅#5】 Golang基本数据类型相互转换
一、转换基本语法
Golang中的基本数据转换需要显示转换,即强制转换。
转换基本语法:数据类型(变量)
注意事项:
注意:被转换的是变量储存的数据(即值),变量本身的数据类型并没有变化!
大范围数据转换为小范围数据时编译器不会报错,但是转换结果会按照溢出处理。在转换时需要考虑范围问题。
小提示:在包前加下划线_,表示忽略,不会报错。eg:
package main
import _ "fmt"
func main() {
}
在使用Go语言标准库的时候,可以多去Go官方文档查看资料。
Go官方文档:Go官方文档
二、基本数据类型转String类型
方法一:fmt.Sprintf(“%参数”,表达式) (常用)
fmt.Sprintf(“%参数”,表达式)
,fmt.Sprintf()
会返回转换后的字符串。
对于“%参数”的使用和选择参考Go官方文档。
函数说明:
// Sprintf formats according to a format specifier and returns the resulting string.
func Sprintf(format string, a ...any) string {
p := newPrinter()
p.doPrintf(format, a)
s := string(p.buf)
p.free()
return s
}
使用和举例的文章:【Go黑帽子】使用Golang编写一个TCP扫描器(基础篇)
package main
import (
"fmt"
"net"
)
func main() {
for i := 1; i <= 1024; i++ {
//将i的值和地址一起转换为字符串
address := fmt.Sprintf("scanme.nmap.org:%d", i)
conn, err := net.Dial("tcp", address)
//如果端口已关闭或已过滤,直接进入下一循环
if err != nil {
continue
}
//关闭端口连接
conn.Close()
fmt.Printf("%d open\n", i)
}
}
方法二:使用strconv包的函数
使用strconv包中的如下函数:
它们的使用详情可以在 Go官方文档 中查看:
使用举例如下:
package main
import (
"fmt"
"strconv"
)
var (
num1 int = 100
num2 float64 = 99.99
b bool = true
)
func main() {
str1 := strconv.FormatInt(int64(num1), 10)
fmt.Printf("the type of num1 is %T,str = %q\n", str1, str1)
str2 := strconv.FormatFloat(num2, 'f', 5, 64)
fmt.Printf("the type of num1 is %T,str = %q\n", str2, str2)
str3 := strconv.FormatBool(b)
fmt.Printf("the type of num1 is %T,str = %q\n", str3, str3)
}
//输出结果:
// the type of num1 is string,str = "100"
// the type of num1 is string,str = "99.99000"
// the type of num1 is string,str = "true"
其余转换方法:func Itoa
int转string类型函数——func Itoa(i int) string
该方法可以方便简单地将int类型转换为string类型。
三、String类型转基本数据类型
使用strconv包的函数进行转换:
在 Go官方文档 中查看其基本使用方法:
使用举例如下:
package main
import (
"fmt"
"strconv"
)
var (
b1 string = "100"
b2 string = "99.99"
b3 string = "true"
)
func main() {
num1, _ := strconv.ParseInt(b1, 10, 64)
fmt.Printf("the type of nmu1 is %T,num1 = %v\n", num1, num1)
num2, _ := strconv.ParseFloat(b2, 64)
fmt.Printf("the type of nmu1 is %T,num1 = %v\n", num2, num2)
num3, _ := strconv.ParseBool(b3)
fmt.Printf("the type of nmu1 is %T,num1 = %v\n", num3, num3)
}
//输出结果:
// the type of nmu1 is int64,num1 = 100
// the type of nmu1 is float64,num1 = 99.99
// the type of nmu1 is bool,num1 = true
四、String类型转基本数据类型使用细节
注意:
需要确保String类型能够转换成有效的数据类型。
无效转换时编译器不会报错,但是值的结果会变为已转类型的默认值。
eg:
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "hello world!"
num1, _ := strconv.ParseInt(str, 10, 64)
fmt.Printf("the type of nmu1 is %T,num1 = %v\n", num1, num1)
num2, _ := strconv.ParseBool(str)
fmt.Printf("the type of nmu2 is %T,num2 = %v\n", num2, num2)
}
//输出结果:
// the type of nmu1 is int64,num1 = 0
// the type of nmu2 is bool,num2 = false