golang数据类型与转换
一、数值型int(默认值 0)
int 整数 32位系统占4个字节(-2^31~2^31-1)、64位系统占8个字节(-2^63~2^63-1)
uint 32位系统占4个字节(0~2^32-1)、64位系统占8个字节(0-2^64-1)
rune 范围(-2^31~2^31-1) 等价int32,表示一个Unicode码
byte 范围(0~255),当要存储字符时选用byte
1、int的有符号类型
int8 | 有符号 8 位整型 (-128 到 127) |
int16 | 有符号 16 位整型 (-32768 到 32767) |
int32 | 有符号 32 位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
2、int的无符号类型
uint8 | 无符号 8 位整型 (0 到 255) |
uint16 | 无符号 16 位整型 (0 到 65535) |
uint32 | 无符号 32 位整型 (0 到 4294967295) |
uint64 | 无符号 64 位整型 (0 到 18446744073709551615) |
二、浮点型float(默认值 0)
1、float32 占用4个字节(单精度) 范围(-3.403E38~3.403E38)
2、float64 占用8个字节(双精度) 范围 (-1798E308~1.798E308) float64精度高于float32
三、字符型(默认值 "")
字符型存储与读取方式
存储:字符->对应码值->二进制->存储
读取:二进制->码值->字符->读取
如:
var x byte = 'a' var y int = '够' //utf-8编码Unicode编码10进制结果 fmt.Println(x,y) 结果: 97 22815 赋值字符和int的运算 var x = 10 + 'a' fmt.Println(x) 结果: 107
四、布尔值bool(占用一个字节)(默认值 false)
golang不可以用0或非0来替代false和true
1、true 真
2、false 假
五、字符串string(默认值 "")
在go中字符串一旦赋值,字符串就不可变
"" 双引号扩起来的字符串能识别转义符号
`` 反引号不识别转义符号,把字符串原生形式输出
字符串拼接方式
如:
var x = "hello" + "world" 多个换行相加 var y = "hello" + "world" + "xxx" + "yyy"
六、指针
指针就是一个指针变量指向了一个值的内存地址。
获取变量地址使用&
如:
var i int = 10
&i /为i变量值的内存地址
指针例子:
var a int = 10 fmt.Println(&a) //获取a变量值存储在内存中的地址 var ptr *int = &a //ptr是指针变量名,*int代表int类型的指针(如*string为string类型的指针等),ptr的值是a的内存地址 fmt.Printf("%v\n", ptr) fmt.Printf("ptr指向的值 %v\n", *ptr) //*ptr就是指向的值 结果: 0xc00005a058 0xc00005a058 ptr指向的值 10
七、golang字符类型相互转换
1、int与float之间转换
var x int = 10 var a1 float32 = float32(x) fmt.Printf("Type: %T Value: %v\n", x, x) fmt.Printf("Type: %T Value: %v\n", a1, a1) 结果: Type: int Value: 10 Type: float32 Value: 10
2、string与int转换
方式一、使用fmt.Sprintf 转换
var x int = 10 var str string str = fmt.Sprintf("%d",x) fmt.Printf("Type: %T Value: %v\n", str, str) 结果: Type: string Value: 10
方式二、使用strconv
package main import ( "fmt" "strconv" ) func main(){ var str string str_b := "false" var b bool var i int = 109 var str_s string = "333" var in int64 var f1 float64 var str_f string = "231.32124" str = strconv.Itoa(i) //string b,_ = strconv.ParseBool(str_b) //会返回2个值 in,_ = strconv.ParseInt(str_s,10,64) //转成10进制的,0转为int,8代表int8,32,64等 f1,_ = strconv.ParseFloat(str_f,64) //转成float64 fmt.Printf("%T %v\n",str,str) fmt.Printf("%T %v\n",b,b) fmt.Printf("%T %v\n",in,in) fmt.Printf("%T %v\n",f1,f1) } ###结果 string 109 bool false int64 333 float64 231.32124