值类型和引用类型程序员
一、值类型:变量直接存储值,内存一般在栈中分配。 算法
基本数据类型int、float、bool、string以及数组和struct。数组
二、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存一般在堆上分配。经过GC回收。缓存
指针、slice(切片)、map、chan(管道)、interface等都是引用类型。数据结构
堆和栈的区别:
1、堆栈空间分配区别:
一、栈(操做系统):由操做系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操做方式相似于数据结构中的栈;
二、堆(操做系统): 通常由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式却是相似于链表。
2、堆栈缓存方式区别:
一、栈使用的是一级缓存, 他们一般都是被调用时处于存储空间中,调用完毕当即释放,调用对象的速度较快;(栈空间)
二、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并非一旦成为孤儿对象就能被回收)。
调用对象的速度要相对慢一些。(物理硬盘空间)
3、堆栈数据结构区别:
堆(数据结构):堆能够被当作是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。(函数的调用就是栈,先进后出)
值类型和引用类型实例:ide
变量的做用域(全局区域只能声明变量,不能执行语句,a:=1,这类语句编译不能经过)函数
一、在函数内部声明的变量叫作局部变量,生命周期仅限于函数内部。在{ }里面的语句块里面的变量生命周期仅限于语句块。ui
二、在函数外部声明的变量叫作全局变量,生命周期做用于整个包,若是是大写的,则做用于整个程序。spa
一、bool类型,只能存true和false操作系统
二、相关操做符, !、&&、||
三、数字类型,主要有int、int八、int1六、int3二、int6四、uint8(无符号整形)、uint1六、uint3二、uint6四、float3二、float64
四、类型转换,type(variable),好比:var a int=8; var b int32=int32(a)
五、逻辑操做符: == 、!=、<、<=、>和 >=
六、数学操做符:+、-、*、/等等
七、字符类型:var a byte
var a byte = ‘c’
八、字符串类型: var str string
九、字符串表示两种方式: 1)" "双引号 2)`` 反引号
全部整数初始化为0,全部浮点数初始化为0.0,全部布尔类型初始化为False
十、位操做符
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 )
一、语法: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 //不能用于全局变量的声明