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

View Code

 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 //不能用于全局变量的声明

 

posted @ 2018-11-24 10:32  shy车队破风手  阅读(412)  评论(0编辑  收藏  举报