golang学习笔记003--变量与数据类型

1.变量

1.1 变量使用的三种方式

● 第一种:指定变量类型。声明后若不赋值,使用默认值
● 第二种:根据值自行判断(类型推导)
● 第三种:省略var。注意:=左侧的变量应该是没有声明过的,否则编译错误

	package main
	
	import "fmt"//ftm保重提供格式化,输入输出函数
	
	func main(){
		//变量声明
		//第一种
		var i int
		i=10
		fmt.Println(i)
		//第二种
		var m =10.1
		fmt.Println(m)
		//第三种
		name := "wang"//等价于 var name string     name="wang"
		fmt.Println(name)
	}

1.2 多变量声明

	//一次声明多个对象
	//第一种
	var n1,n2,n3 int
	fmt.Println(n1,n2,n3)
	//第二种
	var m1,m2,m3 = 1,2,3
	fmt.Println(m1,m2,m3)
	//第三种
	a1,a2,a3 :=100,"wang",10.2
	fmt.Println(a1,a2,a3)

1.3 全局变量

	//定义全局变量
	var aa1=100
	var aa2="ww"
	//推荐使用
	var (
		aa3=200
		aa4="ee"
	)

2. 数据类型

在这里插入图片描述

2.1 数值型

2.1.1 整数类型

在这里插入图片描述

● 查看变量类型及字节数
●fmt.Printf(“a1的类型是%T,a2占用的字节数是%d”,a1,unsafe.Sizeof(a2))
●输出:a1的类型是int,a2占用的字节数是16

2.1.2 浮点型

在这里插入图片描述
说明:
● 浮点数都是有符号的
● 尾数部分可能丢失,造成精度损失
● 浮点类型有固定的范围和长度,不受OS影响
● 浮点型默认为float64
● 浮点型有两种表示形式:十进制和科学计数法

	//十进制数形式:如:5.12    .512(必须有小数点)
	num6 := 5.12
	num7 := .123//=> 0.123
	fmt.Println("num6=",num6,"num7=",num7)//num6= 5.12 num7= 0.123
	//科学计数法形式
	num8 :=5.1234e2 //? 5.1234* 10的2次方
	num9 := 5.1234E2//?5.1234 *10的2次方
	num10 := 5.1234E-2 //?5.1234 / 10的2次方0.051234
	fmt.Println("num8=",num8,"num9=",num9,"num10=",num10)//num8= 512.34 num9= 512.34 num10= 0.051234

2.2 字符类型

● go语言中没有专门的字符类型,如果要存储单个字符,一般使用byte
● go语言的字符是由单个字节连起来的

	var c1 byte='a'
	var c2 byte='0'
	//当我们直接输出byte值,就是输出了对应的的字符的码值
	fmt.Println("c1=",c1,"c2=",c2)//c1= 97 c2= 48
	//如果要输出对应的字符,需要格式化输出
	fmt.Printf("c1=%c c2=%c\n",c1,c2)//c1=a c2=0
	//var c3 byte='北' //overflow溢出
	var c3 int='北'
	fmt.Printf("c3=%c c3对应码值=%d",c3,c3)//c3=北 c3对应码值=21271

● go语言使用utf-8编码,英文1个字节,汉字3个字节
● 在go中,字符的本质是一个整数,直接输出时,是该字符对应的utf-8编码的码值
● 可以直接给某个变量赋一个数字,然后格式化输出时%c,会输出该数字对应的Unicode码
● 字符类型是可以进行运算的,相当于一个整数,因为它对应的是Unicode码

2.3 布尔类型

● 只允许取值true和false
● 占用一个字节

2.4 String类型

● 字符串就是一串固定长度的字符连接起来的字符序列。go语言的字符串是由单个字节连接起来的,使用utf-8
● 字符串一旦赋值,字符串就不能修改了,在go中字符串是不可变的
● var str =“hello”
● str[0]=‘a’ 这里不能修改str的内容,go中字符串是不可变的
● 字符串的两种表示方式
○ 双引号,会识别转义字符
○ 反引号,以字符串的原生形式展示,包括换行和特殊字符,可以防止攻击,输出源码等效果使用

2.5 基本数据类型的默认值

● 整数:0
● 浮点型:0
● 字符串:""
● 布尔类型:false

2.6 基本数据类型相互转换

● go语言和java不同,go在不同变量类型之间赋值时需要显示转换。不能自动转换
● T(V) 将值V转换为类型T

	var i int32=100
	var n1 float32=float32(i)
	var n2 int8=int8(i)
	var n3 int64=int64(i)
	fmt.Printf("i=%v n1=%v n2=%v n3=%v",i,n1,n2,n3)//i=100 n1=100 n2=100 n3=100

注意事项
● 数据类型的转换可以是从 表示范围小–>表示范围大,也可以 范围大–>范围小
● 被转换的是变量存储的数据即值,变量本身的数据类型并没有变化
● 在转换中,比如将int64转成int8[-128–127],编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样,因此在转换时,需要考虑范围

	var n1 int32=12
	var n2 int8
	var n3 int8
	n2=int8(n1)+127//编译通过,但是结果不是127+12,按溢出处理
	n3=int8(n1)+128//编译不通过
	fmt.Println(n2,n3)
	var n1 int32=12
	var n2 int64
	var n3 int8

	n2=n1+20//int32--->int64 错误
	n3=n1+20//int32--->int8 错误

2.7 基本数据类型和String的转换

2.7.1 方式一:fmt.Sprintf("%参数",表达式)

	var num1 int=90
	var num2 float64=23.345
	var b bool=true
	var c byte='j'
	var str string

	str=fmt.Sprintf("%d",num1)
	fmt.Printf("str type %T str =%q\n",str, str)//str type string str ="90"

	str=fmt.Sprintf("%f",num2)
	fmt.Printf("str type %T str =%q\n",str, str)//str type string str ="23.345000"

	str=fmt.Sprintf("%t",b)
	fmt.Printf("str type %T str =%q\n",str, str)//str type string str ="true"

	str=fmt.Sprintf("%c",c)
	fmt.Printf("str type %T str =%q\n",str, str)//str type string str ="j"

2.7.2 方式二:使用strconv包函数

	var num3 int=99
	var num4 float64=23.3453
	var num5=232
	var b2 bool
	var str1 string

	str1=strconv.FormatInt(int64(num3),10)
	fmt.Printf("str1 type %T str1 =%q\n",str1, str1)//str1 type string str1 ="99"	
	
	str1=strconv.FormatFloat(num4,'f',10,64)//'f'格式 10:表示小数位保留10位 64:表示这个小数是float64
	fmt.Printf("str1 type %T str1 =%q\n",str1, str1)//str1 type string str1 ="23.3453000000"

	str1=strconv.FormatBool(b2)
	fmt.Printf("str1 type %T str1 =%q\n",str1, str1)//str1 type string str1 ="false"

	str1=strconv.Itoa(int(num5))
	fmt.Printf("str1 type %T str1 =%q\n",str1, str1)//str1 type string str1 ="232"

2.8 String类型转基本数据类型

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

	var str2 string="1234"
	var n1 int64
	var n2 int
	n1,_=strconv.ParseInt(str2,10,64)//b type bool b=true
	
	n2=int(n1)
	fmt.Printf("n1 type %T  n1=%v\n",n1,n1)//n1 type int64  n1=1234
	fmt.Printf("n2 type %T  n2=%v\n",n2,n2)//n2 type int  n2=1234

	var str3 string ="123.3"
	var f1 float64
	f1,_=strconv.ParseFloat(str3,64)//n2 type int  n2=1234
	fmt.Printf("f1 type %T  f1=%v\n",f1,f1)//f1 type float64  f1=123.3

注意事项:
● 将string转为基本数据类型时,要确保string类型能够转换为有效的数据,如果把hello转为一个整数,得到的结果会是0,bool类型转换时,非bool时结果为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值