Golang语言基本数据类型默认值及字符串之间互相转换案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.基本数据类型默认值
package main
import "fmt"
func main() {
// 在golang中,数据类型都有默认值,当程序员没有赋值时,会自动保留默认值(又称为"零值")
var (
a int // 0
b float32 // 0
c float64 // 0
d bool // false
e string // ""
)
fmt.Printf("a ---> [%v]\n", a)
fmt.Printf("b ---> [%v]\n", b)
fmt.Printf("c ---> [%v]\n", c)
fmt.Printf("d ---> [%v]\n", d)
fmt.Printf("e ---> [%v]\n", e)
}
二.类型转换
1.类型转换概述
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法如下:
T(v)
其中,T表示要转换的类型。v包括变量、复杂算子和函数返回值等.
在程序开发中,我们经常需要将基本数据类型转换成string类型:
- 方式一(强烈推荐): fmt.Sprintf("%参数",表达式);
- 方式二(不推荐): 使用strconv包的函数;
或者将string类型转换成基本数据类型:
方式: 使用strconv包的函数。
2.整型和浮点类型转换案例
package main
import (
"fmt"
)
func main() {
var (
a int = 100
// 注意,此处是将a的值转换为float32类型,a的类型并没有发生变化哟~
b float32 = float32(a)
c int64 = 129
// 将int64转换为int8的时候,编译不会报错,但是数据会溢出。
d int8 = int8(c) + 127
// 编译无法通过,因为128超出了int8的取值范围(-128~127)
// e int8 = int8(c)+128
)
fmt.Printf("a = [%v], a = [%T]\n", a, a)
fmt.Printf("b = [%v], b = [%T]\n", b, b)
fmt.Printf("c = [%v], c = [%T]\n", c, c)
fmt.Printf("d = [%v], d = [%T]\n", d, d)
// fmt.Printf("e = [%v], e = [%T]\n", e, e)
}
3.基本数据类型转字符串类型
package main
import (
"fmt"
"strconv"
)
func main() {
var (
a int = 20
b float64 = 3.1415926
c bool = false
d byte = 'Y'
// 方式一: 基于"fmt.Sprintf"进行转换(推荐)
s1 string = fmt.Sprintf("%d", a)
s2 string = fmt.Sprintf("%f", b)
s3 string = fmt.Sprintf("%t", c)
s4 string = fmt.Sprintf("%c", d)
// 方式二: 使用"strconv"包进行转换
// 第一个参数必须转为int64类型,第二个参数子面量的进制类型
s5 string = strconv.FormatInt(int64(a), 10)
// 定义个参数是float64,第二个参数: 'f'表示(-ddd.dddd)格式,第三个参数是保留的小数点后面9位,第四个参数这个小数是float64类型。
s6 string = strconv.FormatFloat(b, 'f', 9, 64)
// 根据c的值返回"true"或"false”。
s7 string = strconv.FormatBool(c)
// 是FormatInt的无符号整数版本,但是存储的数据是一个对应的unicode的码值哟~并不是对应的字符!
s8 string = strconv.FormatUint(uint64(d), 10)
)
fmt.Printf("s1对应的类型是: %T,s1 = %q\n", s1, s1)
fmt.Printf("s2对应的类型是: %T,s2 = %q\n", s2, s2)
fmt.Printf("s3对应的类型是: %T,s3 = %q\n", s3, s3)
fmt.Printf("s4对应的类型是: %T,s4 = %q\n", s4, s4)
fmt.Printf("s5对应的类型是: %T,s5 = %q\n", s5, s5)
fmt.Printf("s6对应的类型是: %T,s6 = %q\n", s6, s6)
fmt.Printf("s7对应的类型是: %T,s7 = %q\n", s7, s7)
fmt.Printf("s8对应的类型是: %T,s8 = %q\n", s8, s8)
}
4.字符串类型转换为基本数据类型
package main
import (
"fmt"
"strconv"
)
func main() {
var (
s1 string = "true"
s2 = "89"
s3 = "3.1415926"
name = "yinzhengjie"
a bool
b int64
c float64
)
// 将字符串类型转换为bool类型
a, _ = strconv.ParseBool(s1)
// 将字符串类型转换为int类型
b, _ = strconv.ParseInt(s2, 10, 64)
// 将字符串类型转换为float类型
c, _ = strconv.ParseFloat(s3, 64)
fmt.Printf("a对应的类型是: %T, a= [%t]\n", a, a)
fmt.Printf("b对应的类型是: %T, b= [%d]\n", b, b)
fmt.Printf("c对应的类型是: %T, c= [%f]\n", c, c)
// 如何想要将unicode码值字符串转换成一个byte或者rune类型,先要将其转换为int64类型,然后使用string内置函数将其转换为字符串类型输出。
fmt.Printf("s2对应的字符为: [%q]\n",string(b))
/*
温馨提示:
string向基本数据类型转换的时候,一定要确保string类型能够转成有效的数据类型,否则最后得到的结果就是按照对应类型的默认值("零值")输出。
*/
a, _ = strconv.ParseBool(name)
b, _ = strconv.ParseInt(name, 10, 64)
c, _ = strconv.ParseFloat(name, 64)
fmt.Printf("a对应的类型是: %T, a= [%t]\n", a, a)
fmt.Printf("b对应的类型是: %T, b= [%d]\n", b, b)
fmt.Printf("c对应的类型是: %T, c= [%f]\n", c, c)
}
5.字符串强制转换字节切片型案例
package main
import (
"fmt"
)
func main() {
s1 := "Big"
fmt.Println("s1 ---> ", s1)
// 将字符串强制转换成字节切片类型
byteArray := []byte(s1)
fmt.Println("修改前: byteArray ---> ", byteArray)
byteArray[0] = 'P'
fmt.Println("修改后: byteArray ---> ", byteArray)
s2 := string(byteArray)
fmt.Println("s2 ---> ", s2)
}
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18284960,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。