golang学习笔记第二部分:2.基本数据类型

9、go的数据类型

golang默认都是使用utf-8编码

9.1基本数据类型

数值型

整数:默认0 有符号int 32位系统4个字节,64位系统8个字节,int8,int16,int32,int64 无符号uint,uint8,uint16,uint32,uint64 rune
有符号,类似int32,标识一个unicode码,处理中文常用 byte 单个字母字符 0-255 默认int 浮点:float32 单精度 4 个字节 ±3.403E38 float64 双精度 8个字节 ±1.798E308
符号位+指数位+尾数位

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var a int = 8900 //定义一个整数变量及赋值
	fmt.Println("a=", a)
	var b uint = 1
	var c byte = 255 // 256就超限报错
	fmt.Println("b= ", b, "c= ", c)

	var n1 = 100
	fmt.Printf("n1 的类型是 %T \n", n1) // fmt.Printf()可以用于格式化输出

	//如何查看某个变量的类型和占用字节数
	var n2 int64 = 10
	fmt.Printf("n2的类型是 %T,n2的占用字节数是 %d", n2, unsafe.Sizeof(n2))
}

字符型:

默认0 没有专门的字符型,使用byte来保持单个字母字符,不能存汉字(需要3byte),汉字需要用到范围更大的类型,比如int

package main

import (
	"fmt"
)

func main() {
	var a float32 = 123.334
	fmt.Println("a=", a)

	//当我们直接输出byte的值,结果是ASCII码值
	var c1 byte = 'a'
	var c2 byte = '1'
	var c3 = '南'
	fmt.Println("c1=", c1, "c2=", c2)
	fmt.Printf("c1=%c c2=%c c3=%c c3的类型是%T \n", c1, c2, c3, c3)

	var c4 int = 22269
	fmt.Printf("c4=%c", c4)
	//字符实际保存的是一个整数,对应的unicode编码值
}

布尔型:

默认false 只能取true、false,不能用0或非0替代

package main

import (
	"fmt"
)

func main() {
	var b = false
	fmt.Println("b=", b)
	fmt.Printf("b类型是%T", b)
	//bool只能取true、false,不能用0或非0替代

}

字符串 默认""

一串固定长度的字符连接起来的字符序列,go字符串是由单个字节连接起来,使用utf-8 编码 字符串一旦赋值,就不能修改了 双引号会识别转义 反引号保留原文不识别转义 +可以拼接字符串

package main

import (
	"fmt"
	_ "os"
)

func main() {
	var s1 string = "i am jack"
	fmt.Println("s1=", s1)
	fmt.Printf("s1类型是%T\n", s1)
	// s1[0] = 'a'
	fmt.Println("s1[0]=", s1[0])

	//反引号中所有符号保留原样
	var s2 string = `"i am jack"\n`
	fmt.Println("s2=", s2)

	var i int = 100
	var j float32 = float32(i)
	var u uint8 = uint8(j)
	fmt.Printf("u=%v,u的类型是%T\n", u, u)
	fmt.Printf("i=%v,i的类型是%T", i, i)
	//%v原值输出

	var n1 int32 = 12
	var n2 int64
	var n3 int8

	// n2 = n1 + 20
	n2 = int64(n1) + 20
	// n3 = n1 + 20
	n3 = int8(n1) + 20
	fmt.Println(n1, n2, n3)
	// n1是int32,+20也是int32,n2是int64,会报错,n3以此类推
	//int64(n1)可以解决问题
}

基本数据类型的转换,需要显式转换T(v)

可以转换不同长度类型,被转换的是变量存储的数据,被转换变量本身的类型没有变化 长转短时,超出部分会按溢出处理

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var num1 int = 99
	var num2 float64 = 12.345
	var b bool = true
	var myChar byte = 'h'
	var str string

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = fmt.Sprintf("%c", myChar)
	fmt.Printf("str type %T str=%v\n", str, str)

	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = false

	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = strconv.Itoa(num3 + 999)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = strconv.FormatFloat(num4, 'f', 10, 64)
	fmt.Printf("str type %T str=%v\n", str, str)

	str = strconv.FormatBool(b2)
	fmt.Printf("str type %T str=%v\n", str, str)

}

基本类型转换为string类型的方法
  • fmt.Sprintf("%T",x)
  • strconv.FormatInt/FormatFloat/Itoa
  • string类型转换为基本数据类型的方法: strconv.ParseInt/ParseFloat/ParseBool
    string转基本数据类型注意事项:
  • 无效值转换,会使用默认值,比如 abc转为int,值为0
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var str1 = "true"
	var b1 bool
	b1, _ = strconv.ParseBool(str1)
	// strconv.ParseBool返回2个值,需要定义2个变量或者使用_匿名函数接收
	fmt.Printf("b1 type is %T b1=%v\n", b1, b1)

	var str2 string = "12345678"
	var i1 int64
	i1, _ = strconv.ParseInt(str2, 10, 0)
	fmt.Printf("str2 type is %T str2=%v\n", i1, i1)

	var str3 string = "123.45678"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("f1 type is %T f1=%v\n", f1, f1)

	var str4 string = "jack"
	var i2 int64 = 11
	i2, _ = strconv.ParseInt(str4, 10, 64)
	fmt.Printf("i2 type is %T i2=%v", i2, i2)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值