go两种数据类型的区别数据类型和操作符常量变量声明
Posted domestique
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go两种数据类型的区别数据类型和操作符常量变量声明相关的知识,希望对你有一定的参考价值。
值类型和引用类型
1、值类型:变量直接存储值,内存通常在栈中分配。
基本数据类型int、float、bool、string以及数组和struct。
2、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。
指针、slice(切片)、map、chan(管道)、interface等都是引用类型。
堆和栈的区别: 一、堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二、堆栈缓存方式区别: 1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放,调用对象的速度较快;(栈空间) 2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。
调用对象的速度要相对慢一些。(物理硬盘空间) 三、堆栈数据结构区别: 堆(数据结构):堆可以被看成是一棵树,如:堆排序; 栈(数据结构):一种先进后出的数据结构。(函数的调用就是栈,先进后出)
值类型和引用类型实例:
变量的作用域(全局区域只能声明变量,不能执行语句,a:=1,这类语句编译不能通过)
1、在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部。在{ }里面的语句块里面的变量生命周期仅限于语句块。
2、在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。
数据类型和操作符
1、bool类型,只能存true和false
2、相关操作符, !、&&、||
3、数字类型,主要有int、int8、int16、int32、int64、uint8(无符号整形)、uint16、uint32、uint64、float32、float64
4、类型转换,type(variable),比如:var a int=8; var b int32=int32(a)
5、逻辑操作符: == 、!=、<、<=、>和 >=
6、数学操作符:+、-、*、/等等
7、字符类型:var a byte
var a byte = ‘c’
8、字符串类型: var str string
9、字符串表示两种方式: 1)" "双引号 2)`` 反引号
所有整数初始化为0,所有浮点数初始化为0.0,所有布尔类型初始化为False
10、位操作符
a.与操作:& 1&1 =1 1&0 = 0 0&1 =0 0&0 = 0
b.或操作:| 1|1 = 1 1&0 = 1 0&1 =1 0&0 = 0
d.异或操作:^ 1|1 = 0 1&0 = 1 0&1 =1 0&0 = 0
左移<< 1<<10=1024
右移>> 1024>>10=1
常量
1.常量使用const 修饰,代表永远是只读的,不能修改。
2.const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string。
3.语法:const identifier [type] = value,其中type可以省略。
const b string = “hello world”
const b = “hello world”
const Pi = 3.1414926
const a = 9/3
预定义常量:
比较优雅的写法:
const (
a = 0
b = 1
c = 2
)
更加专业的写法:
const (
a = iota //a=0,后面的变量都在前面的基础上都加1
b //1
c //2
)
变量
1、语法:var identifier type
var v1 int
var v2 string
var v3 [10]int //数组
var v4 []int //数组切片
var v5 struct{
f int
}
var v6 *int //指针
var v7 map[string] int
var v8 func(a int) //指针
第二种写法:
var (
v1 int //默认为0
v2 string //默认为""
v3 [10]int //数组
v4 []int //数组切片
v5 struct{
f int
}
v6 *int //指针
v7 map[string] int
v8 func(a int) //指针
v9 bool //默认为false
)
变量的初始化操作:
var v1 int = 10
var v2 = 10
v3 := 10 //不能用于全局变量的声明
以上是关于go两种数据类型的区别数据类型和操作符常量变量声明的主要内容,如果未能解决你的问题,请参考以下文章
Go语言基础:语言格式|变量|常量|数据类型|占位符|转义符