Go语言之数据类型(二)
一、基本数据类型的默认值
数据类型 | 默认值 |
整型 | 0 |
浮点型 | 0 |
布尔型 | false |
字符串 | "" |
测试:
package main import "fmt" func main() { // 数据类型默认值 var a int var b float32 var c float64 var isStatus bool var username string // 打印出默认值 fmt.Printf("a=%d, b=%v, c=%v, isStatus=%v, username=%v", a, b, c, isStatus, username) //a=0, b=0, c=0, isStatus=false, username="" }
二、基本数据类型相互转换
Go中不同的数据类型之间需要显式转换,不同类型之间不能自动转换。
package main import "fmt" func main() { var i int32 = 10 // i int32-->float var j float32 = float32(i) // 高精度-->低精度 var k int8 = int8(i) // 低精度-->高精度 var m int64 = int64(i) fmt.Printf("i=%v j=%v k=%v m=%v", i, j, k, m) //i=10 j=10 k=10 m=10 }
注意:
- Go中高精度可以转成低精度,同样低精度也可以转成高精度,但是如果高精度转低精度无法盛放会造成溢出的现象
- 被转换的是数据值,而它本身的类型并没有变化
三、基本数据类型和string之间的转换
(一)基本数据类型转string
1、func Sprintf(format string, a ...interface{}) string
Sprintf根据format参数生成格式化的字符串并返回该字符串。
package main import "fmt" func main() { var a1 int = 10 var a2 float64 = 10.236 var a3 bool = false var a4 byte = 'k' // fmt.Sprintf转换 b1 := fmt.Sprintf("%d", a1) fmt.Printf("b1类型%T b1=%q\n", b1, b1) b2 := fmt.Sprintf("%f", a2) fmt.Printf("b2类型%T b2=%q\n", b2, b2) b3 := fmt.Sprintf("%t", a3) fmt.Printf("b3类型%T b3=%q\n", b3, b3) b4 := fmt.Sprintf("%c", a4) fmt.Printf("b4类型%T b4=%q\n", b4, b4) /* 输出 b1类型string b1="10" b2类型string b2="10.236000" b3类型string b3="false" b4类型string b4="k" b5类型string b5="hello" */ }
2、使用strconv包中的函数
strconv包实现了基本数据类型和其字符串表示的相互转换,其中基本数据类型转string的函数包含:
- func FormatBool(b bool) string
- func FormatInt(i int64, base int) string
- func FormatUint(i uint64, base int) string
- func FormatFloat(f float64, fmt byte, prec, bitSize int) string
package main import ( "fmt" "strconv" ) func main() { var a1 int = 10 var a2 float64 = 10.236 var a3 bool = false // FormatInt函数第一个参数是int64类型的参数,所以需要转换 b1 := strconv.FormatInt(int64(a1), 10) fmt.Printf("b1类型%T b1=%q\n", b1, b1) // 'f'表示格式,10表示小数位保留10位,64表示这个小数是float64类型 b2 := strconv.FormatFloat(a2, 'f', 10, 64) fmt.Printf("b2类型%T b2=%q\n", b2, b2) b3 := strconv.FormatBool(a3) fmt.Printf("b3类型%T b3=%q\n", b3, b3) /* 输出 b1类型string b1="10" b2类型string b2="10.2360000000" b3类型string b3="false" */ }
(二)string类型转基本数据类型
使用strconv包中的如下函数:
- func ParseBool(str string) (value bool, err error)
- func ParseInt(s string, base int, bitSize int) (i int64, err error)
- func ParseUint(s string, base int, bitSize int) (n uint64, err error)
- func ParseFloat(s string, bitSize int) (f float64, err error)
package main import ( "fmt" "strconv" ) func main() { var str1 string = "123" var n1 int64 // strconv.ParseInt返回两个值(i int64, err error) // 将第二个err忽视使用 _ n1, _ = strconv.ParseInt(str1, 10, 64) fmt.Printf("n1的类型位%T n1=%v\n", n1, n1) //n1的类型位int64 n1=123 var str2 string = "123.56" var f1 float64 f1, _ = strconv.ParseFloat(str2, 64) fmt.Printf("f1的类型位%T f1=%v\n", f1, f1) //f1的类型位float64 f1=123.56 var str3 string = "false" var b1 bool b1, _ = strconv.ParseBool(str3) fmt.Printf("b1的类型位%T f1=%v\n", b1, b1) //b1的类型位bool f1=false }
注意事项:
- string转成基本类型要确保是有效的数据类型,比如不能将string类型值为”hello“转成int类型
- string转int,float基本数据类型时,返回值是int64或者float64,如果需要其它类型需要再进行转化
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。