go语言学习之数据类型

go语言学习之数据类型

1.数据类型分为两大类:

基本数据类型
复杂/派生数据类型

2.基本数据类型分为:

数值型:
整数型:

(int ,int8,int16,int32,int64)

(unit,unit8,unit16,unit32,unit64)

浮点型:

(float32,float64)

字符型:

没有专门的字符集,使用byte表示单个字母字符

布尔型:

bool(true,false)

字符串:

string

补充:

byte是unit8的别名

rune是int32的别名,表示一个Unicode码点

complex64,complex128(表示复数)

3.复杂数据类型

1.指针(Pointer)

2.数组

3.结构体(struct)

4.管道(Channel)

5.函数

6.切片(slice)

7.接口(interface)

8.map

4.整数类型详解

有符号整数类型

有符号整型

package main
import "fmt"

func main()  {
	
	var i int8 =127
	
	fmt.Println(i)
}

可以用上面方式测试整数类型大小

无符号整数类型

可以用上面方式测试无符号整数类型大小

其他的整数类型

无符号整型

5.整数类型使用细节

整数类型使用细节

var n =1000
	//fmt.Printf()  可以用做格式化输出  %T 显示变量的数据类型
	fmt.Printf("n的类型为%T",n)

结果为: n的类型为 int

细节3代码示例:

//如何在程序中查看一个变量的占用字节大小和数据类型(使用较多)
	var x int32 =888
	//unsafe.Sizeof(x)  是unsafe包的一个函数,可以返回x变量占用的字节数
	fmt.Printf("X的类型为 %T,大小为%d",x,unsafe.Sizeof(x))
	//结果为:X的类型为 int32,大小为4

细节4:

	//go 开发时,数据类型的使用遵守保小不保大的原则,为了节省内存空间
	//比如开发时,一个人的年龄范围 1--120,我们使用byte 可以满足需求,就没必要使用int62 ,int 32

细节5:一个byte等于八个bit

6.小数类型/浮点类型

代码示例:

	//定义一个变量存储价格
	var price float32 =99.99
	fmt.Println("猪肉的价格为",price,"1kg")

小数类型分类:单精度,双精度

在这里插入图片描述
1》代码示例:

	var num1 float32=-0.7788521
	var num2 float64= 3.1415926786
	fmt.Println("num1=",num1,"num2=",num2)

2》代码示例:

	//尾数部可能丢失
		var num3 float32=1.0003456789
		var num4 float64=1.0003456789
		fmt.Println("num3=",num3)
		fmt.Println("num4=",num4)
	//	//结果为 :num3= 1.0003457  精度损失

float64 精度高于float32

7.浮点类型的使用细节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrkNrWu0-1574842403731)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574759724458.png)]

	var num5 =1.23
	fmt.Printf("num5的类型为%T",num5)

示例3;

	num7:=3.14
	num8:=.123
	fmt.Println("num7=",num7,"num8=",num8)
	//结果为 :num7= 3.14 num8= 0.123

科学计数法示例:

//科学计数法
	num9:=5.21e2
	num10:=5.21E3
	fmt.Println("num9=",num9,"num10=",num10)
	//结果为:num9= 521 num10= 5210

8.字符类型详解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnJs55qd-1574842403734)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574760523047.png)]

//  直接输出字符是ascii 码值
	var s1 byte='a'
	var s2 byte='1'
	fmt.Println("s1=",s1) //s1=97
	fmt.Println("s2=",s2)//s2=49
//如果我们希望输出对应字符,需要使用格式化输出
fmt.Printf("s1=%c s2=%c",s1,s2)
	//var s3  byte ='肖'//constant 32918 overflows byte  溢出
	var s3  int ='肖'
	fmt.Printf("s3=%c,ascii 码值为 %d",s3,s3)//s3=肖,ascii 码值为 32918

注意:如果我们保存的字符为[0-9,A-Z,a-z]可以直接使用byte

如果保存的ascii码值大于255,可以考虑使用int,

如果我们要想输出具体的字符,请进行格式化输出 %c

9.字符使用细节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxxQ8lWI-1574842403738)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574763160439.png)]

1.utf-8 兼容ascii 码

2.英文字母1个字节,汉字三个字节

//可以直接给某个变量赋一个值,通过格式化输出unicode字符
	var s4 int=32918
	fmt.Printf("s4=%c",s4)//32918s4=肖
//字符类型是可以直接参与运算的
	var s5='a'+10
	fmt.Println(s5)//107

http://www.mytju.com/classcode/tools/encode_utf8.asp 查看码值的链接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTwvhDzT-1574842403741)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574764093760.png)]

10.布尔类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FG2o2sz6-1574842403745)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574764185862.png)]

	var b bool
	fmt.Println(b)
	fmt.Printf("b的大小:%d",unsafe.Sizeof(b))

11.字符串类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0y12btc-1574842403748)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574764559329.png)]

	var str string="你好,世界"
	fmt.Println(str)

12.字符串类型细节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIJLgVkf-1574842403753)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574765089066.png)]

//反引号
	var strx string=`	var b bool
	fmt.Println(b)
	fmt.Printf("b的大小:%d",unsafe.Sizeof(b))

	var str string="你好,世界"
	fmt.Println(str)`

	fmt.Println(strx)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOgiuavq-1574842403758)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574765467220.png)]

13.go基本数据类型默认值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bWZ5fvTS-1574842403762)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574765669354.png)]

14.go基本数据类型转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cx7DIVLg-1574842403764)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574765797892.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJ0rctDc-1574842403768)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574765962084.png)]

15.基本数据类型和string 的转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYvpfAPw-1574842403772)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574769104384.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8Kp90mM-1574842403775)(C:\Users\xiaoweifeng\AppData\Roaming\Typora\typora-user-images\1574769626043.png)]

	var y1 int =100
	var y2 float32=23.345
	var y3 bool =true
	var y4 byte='a'
	var st string
	st=fmt.Sprintf("%d",y1)
	fmt.Printf("st type %T st =%q\n",st,st)
	st=fmt.Sprintf("%f",y2)
	fmt.Printf("st type %T st =%q\n",st,st)
	st=fmt.Sprintf("%t",y3)
	fmt.Printf("st type %T st =%q\n",st,st)
	st=fmt.Sprintf("%d",y4)
	fmt.Printf("st type %T st =%q\n",st,st)

第二种:

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

16.string 转基本数据类型

使用strconv 包下的函数进行转换

func ParseBool(str string) (value bool, err error)

示例:

	var str string ="true"
	var b bool
	b, _ =strconv.ParseBool(str)
	//strconv.ParseBool(str)  函数会返回两个值(value bool,err error)
	//所以我们用_忽略第二个值
	fmt.Printf("b type %T  b=%v\n",b,b)

func ParseInt(s string, base int, bitSize int) (i int64, err error)

示例:

	var str2 string ="12345"
	var i int64
	var i2 int

	i, _ =strconv.ParseInt(str2,10,64)
	i2=int(i)
	fmt.Printf("i的类型 %T i=%v\n",i,i)
	fmt.Printf("i2的类型 %T i2=%v\n",i2,i2)

func ParseUint(s string, base int, bitSize int) (n uint64, err error)

示例:

	var str3 string ="123456"
	var u uint64
	var u2 int

	u, _ =strconv.ParseUint(str3,10,64)
	u2=int(u)
	fmt.Printf("u的类型 %T u=%v\n",u,u)
	fmt.Printf("u2的类型 %T u2=%v\n",u2,u2)

func ParseFloat(s string, bitSize int) (f float64, err error)

示例:

	var str4 string ="3.14159"
	var f float64
	f,_=strconv.ParseFloat(str4,64)
	fmt.Printf("f 的类型 %T f=%v\n",f,f)

注意事项:

在将string 转换成基本数据类型时,确保string 能转成有效的数据,比如我们可以将 “111”,转成整数,但是不能把"helloworld"转换成整数,Go会将其转换成 0,其他类型也一样 float==>0, bool==>false

17.指针

17.1基本介绍:

1》基本数据类型存的就是值,也叫值类型

2》获取变量的地址用&,比如 :var b bool 获取 b的地址用 &b

	var bb bool
	fmt.Printf("bb 的地址为 %v,bb=%v\n",&bb,bb)
	//bb 的地址为 0xc000012130,bb=false

3》指针类型,存储的是一个变量的地址,这个地址指向的值才是变量的值

	//ptr 是一个指针变量,数据类型为 *int,ptr=&n
	var n int =111
	var ptr *int=&n
	fmt.Printf("ptr type %T,ptr=%v\n",ptr,ptr)
	//ptr type *int,ptr=0xc000064110

4》获取ptr向的值,用 *ptr

	fmt.Printf("ptr指向的值为 %v\n",*ptr)
	//ptr指向的值为 111
17.2练习:

1》写一个程序,获取一个变量的地址值

2》用该地址值修改这个变量的值

	var bl bool//默认值 false
	var  ptr2 *bool=&bl
	*ptr2=true
	fmt.Printf("bl的类型 %T,bl的值 %v\n",bl,bl)
	//bl的类型 bool,bl的值 true

指针变量,数据类型为 *int,ptr=&n
var n int =111
var ptr *int=&n
fmt.Printf(“ptr type %T,ptr=%v\n”,ptr,ptr)
//ptr type *int,ptr=0xc000064110


4》获取ptr向的值,用 *ptr

fmt.Printf("ptr指向的值为 %v\n",*ptr)
//ptr指向的值为 111

#### 17.2练习:

1》写一个程序,获取一个变量的地址值

2》用该地址值修改这个变量的值

var bl bool//默认值 false
var  ptr2 *bool=&bl
*ptr2=true
fmt.Printf("bl的类型 %T,bl的值 %v\n",bl,bl)
//bl的类型 bool,bl的值 true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值