变量及基本数据类型

变量

变量是程序的基本组成单位,表示内存中的一个存储区域。
该区域有自己的名称(变量名)和类型(数据类型)。
golang的变量如果没有赋初值,编译器会使用默认值,比如int默认值0,string默认值为空串。
bit是计算机中最小的存储单位,bite是计算机中最基本的存储单位。
1bite=8bit
在这里插入图片描述

变量的使用

package main
import "fmt"

func main(){
	//golang的变量使用方法一:
	//定义变量/声明变量+赋值
	var i int=10
	//若不赋值,int的默认值为0
	//使用变量
	fmt.Println("i=",i)
	//方法二:
	//根据值自行判定变量类型(类型推导)
	var num=10
	//方法三:
	//省略var,注意:=左侧的变量不能是已经声明过的
	//否则会导致编译错误
	//下面的方式等价 var name string ="tmo"
	name:="tom"
}

多个变量的声明(一)

var n1,n2,n3 int
fmt.Println("n1=",n1,"n2=",n2,"n3=",n3)

多个变量的声明(二)

var n1,name,n3=100,"tom",888
//n1=100,name=tom,n3=888

多个变量的声明(三)

//同样可以使用类型推导
n1,name,n3:=100,"tom",888

如何定义全局变量

package main
import "fmt"
//定义全局变量
var n1=100
var n2=200
var name="jack"
//上面的声明方式,也可以改成一次性声明
var(
	n3=300
	n4=900
	name2="mary"
)
func main(){
	fmt.Println("n1=",n1)
	fmt.Println("name=",name)
}

程序中+号的使用:
1.当左右两边都是数值型时,则做加法运算
2.当左右两边都是字符串,则做字符串拼接

变量的数据类型

在这里插入图片描述
byte表示一个1个字节
int8就是八位一个字节
float32表示单精度,float64表示双精度
整数类型:
基本介绍:简单来说就是用于存放整数值的,比如0,-1,235等等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整型的使用细节:
在这里插入图片描述
如何查看变量的数据类型

func main(){
	var n1=100
	//使用格式化输出
	fmt.Printf("n1的类型是%T",n1)
	//输出结果:
	//n1的类型是int
}

如何在程序查看某个变量的占用字节大小和数据类型(使用较多)

package main
import "fmt"
import "unsafe"

func main(){
	var n1 int64=100
	fmt.Printf("n1的类型是 %T n1占用的字节数是 %d ",n1,unsafe.Sizeof(n1))
	//输出结果:
	//n1的类型是 int64 n1占用的字节数是 8
}

小数类型/浮点型:

package main
import(
   "fmt"
)
func main(){
   var price float32=89.12
   fmt.Println("price=",price)
 }

1.浮点数=符号位+指数位+尾数位,说明浮点数都是有符号的。
2. golang的浮点类型有固定的范围和字段长度,不受电脑系统(os)影响。
3. golang的浮点型默认声明为float64类型。
4.可以省略0,比如.123代表的就是0.123。
5.支持科学计数法
6.通常情况使用float64,因为更精确

字符类型:
golang中没有专门的字符类型,如果要储存单个字符(字母),一般使用byte来保存。
字符串就是一串固定长度的字符连接起来的字符序列。
go的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而go的字符串不同,它是由字节组成的。

package main
import "fmt"

func main(){
	var c1 byte='a'
	var c2 byte='0'
	//当我们直接输出byte值,就是输出了对应字符的码值
	fmt.Println("c1=",c1)
	fmt.Println("c2=",c2)
	//若要输出对应的字符,则需要使用格式化输出
	fmt.Printf("c1=%c c2=%c",c1,c2)
	//输出结果
	//c1= 97
	//c2= 48
	//c1=a c2=0
}

当我们要输出一个汉字的时候,汉字的码值超出了byte的范围,所以可以使用int

var c3 int ='北'
fmt.Printf("c3=%c c3对应码值=%d",c3,c3)

输出结果:
在这里插入图片描述
如果字符在ascll表的,可以直接保存到byte,若字符大于对应码值255,可以考虑使用int类型保存。
go语言的字符使用UTF-8编码,国际通用的,包含了ascll表。英文字母占一个字节,汉字占三个字节。

//“国”字对应的码值是22269
var cc4 int 22269
fmt.Printf("c4=%c",c4)
//输出结果为 c3=国

字符类型是可以进行运算的,相当于一个整数,运算时是按照码值运算的。

字符型存储到计算机中,需要将字符对应的码值找出来
存储:字符–>对应码值–>二进制–>存储
读取:二进制–>码值–>字符–>读取
布尔类型:
bool类型数据只允许取值true和false
bool类型占1个字节
boolean类型适于逻辑运算,一般用于程序流程控制。
在这里插入图片描述
字符串类型:

string类型

package main
import "fmt"

func main(){
	var str string="你好"
	fmt.Println(str)
}

使用反引号可以输出一大串内容,包括特殊字符等
在这里插入图片描述
字符串拼接
在这里插入图片描述
基本数据的默认值
整型:0
浮点型:0
字符串:“ ”
布尔类型:false

package main
import "fmt"

func main(){
	var str string
	//这里的%v表示按照变量的值输出
	fmt.Printf("str=%v",str)
}

基本数据类型的转换

golang和java/c不同,go在不同类型的变量之间赋值时需要显式转换。也就是说golang中数据类型不能自动转换。
在这里插入图片描述
在转换中,比如将int64转成int8,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。

在这里插入图片描述
题一:
n2=n1+20
n2的类型是int64,而n1+20结果类型是int64,编译会出错。
n3=n1+20同理
正确写法:
在这里插入图片描述
题二:
n4=int(n1)+127
编译可以通过,但是会溢出,结果不是127+12
n3=int8(n1)+128
编译不通过,因为128>127,其实第一个式子相加结果也大于127,但是编译系统查不出错误,按溢出处理。
在这里插入图片描述

基本数据类型和string的转换

转换前后,两个变量的数据类型都不变。

基本数据类型转string

方法一:

package main
import "fmt"

func main(){
	var num int =99
	var str string
	str=fmt.Sprintf("%d",num)
	fmt.Printf("str type %T str=%v\n",str,str)
	//输出结果str type string str=99
	//转换成功,其他数据类型转string也类似
}

有一点要注意的是,不同数据类型转化为string时,上面代码中%d不是固定的,比如将布尔类型转化为string,就要将%d改为%t。
在这里插入图片描述
在这里插入图片描述
方法二:strconv函数

int转string

package main
import (
	"fmt"
	"strconv"
)

func main(){
	var num int =99
	var str string
	str=strconv.FormatInt(int64(num),10)
	fmt.Printf("str type %T str=%q\n",str,str)
	//输出结果str type string str="99"
}

float64转string

package main
import (
	"fmt"
	"strconv"
)
func main(){
	var num float64 =23.456
	var str string
	str=strconv.FormatFloat(num,'f',10,64)
	//f表示标准格式,10表示小数位保留十位,64表示这个小数是float64
	fmt.Printf("str type %T str=%q\n",str,str)
	//输出结果str type string str="23.4560000000"
}

bool转string

package main
import (
	"fmt"
	"strconv"
)
func main(){
	var m bool =true
	var str string
	str=strconv.FormatBool(m)
	fmt.Printf("str type %T str=%q\n",str,str)
	//输出结果str type string str="true"
}

方法三:strconv包中有一个函数Itoa

package main
import (
	"fmt"
	"strconv"
)

func main(){
	var num int =456
	var str string
	str=strconv.Itoa(num)
	fmt.Printf("str type %T str=%q\n",str,str)
}
string转基本数据类型

使用strconv包的函数
string ->bool
在这里插入图片描述输出结果b type bool b=true

string->int
在这里插入图片描述

package main
import (
	"fmt"
	"strconv"
)

func main(){
	var str string ="123456"
	var num int64
	num,_=strconv.ParseInt(str,10,64)
	fmt.Printf("num type %T num=%v",num,num)
	//输出结果num type int64 num=123456
}

string->float64

package main
import (
	"fmt"
	"strconv"
)

func main(){
	var str string ="123.456"
	var num float64
	num,_=strconv.ParseFloat(str,64)
	fmt.Printf("num type %T num=%v",num,num)
	//输出结果num type float64 num=123.456
}

注意事项
在将string类型转化为基本数据类型时,要确保string类型能够转成有效的数据。比如我们可以吧“123”转成一个整数,但不能把“hello”转成一个整数,如果这样做,golang直接将其转成0。其他类型也是一样的道理。float变成0,bool变成false。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值