值类型和引用类型

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两种数据类型的区别、数据类型和操作符、常量、变量声明的更多相关文章

  1. Redis持久化的两种方式和区别

    该文转载自:http://www.cnblogs.com/swyi/p/6093763.html Redis持久化的两种方式和区别 Redis是一种高级key-value数据库.它跟memcached ...

  2. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  3. Java中serialVersionUID的解释及两种生成方式的区别(转载)

    转载自:http://blog.csdn.net/xuanxiaochuan/article/details/25052057 serialVersionUID作用:        序列化时为了保持版 ...

  4. jsp中两种include的区别【转】

    引用文章:http://www.ibm.com/developerworks/cn/java/j-jsp04293/ http://www.cnblogs.com/lazycoding/archive ...

  5. UIImage两种初始化的区别

    UIImage可以通过以下两种方式进行初始化: //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] UIImage *image = [U ...

  6. PHP中数组合并的两种方法及区别介绍

    PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...

  7. Android小项目之九 两种上下文的区别

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

  8. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  9. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

  10. Ajax的get和post两种请求方式区别

    Ajax的get和post两种请求方式区别 (摘录):http://ip-10000.blog.sohu.com/114437748.html 解get和post的区别. 1. get是把参数数据队列 ...

随机推荐

  1. 解决Google翻译不能用的问题

    解决Google翻译不能用的问题   1.打开C:\Windows\System32\drivers\etc\hosts 2.在hosts后面加入 203.208.40.66 translate.go ...

  2. for in 和 for of 的区别(枚举解释)

    一.for....of 1.for-of是作为ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组.对象等)并且返回各项的值,普通的对象用for-of遍历是会报错的. 2.for ...

  3. mysql慢sql监控

    1.思路 之前用 mysql 一直没有考虑到这点,mysql 慢 sql 监控是很重要的,它能帮我们梳理我们的业务 sql 到底是哪里处了问题,那么慢 sql 监控怎么做呢? 有两种思路来实现: 在应 ...

  4. windows 设置网卡跳跃点

    查看路由表route print -4 添加永久路由表:192.168.1.1(网关)route add 0.0.0.0 mask 255.255.255.0 192.168.1.1 metric 1 ...

  5. oracle学习undo之事务槽和oracle的多种提交方式

    1.事务槽数量参数 每一个oracle数据块里面在数据块头部都有事务槽,事务槽的数量可以去查一下,如果数据库中的表T2: select INI_TRANS,MAX_TRANS from dba_tab ...

  6. k8s centos 79,用kuboard-spray装成功。低版本的。安装docker-ce,安装epel源

    安装日志 #安装epel源 yum install epel-release -y --nogpgcheck # 安装docker-ce yum install -y yum-utils device ...

  7. 根据XML生成实体类

    因为对接系统的XML所需映射的实体类有几十个,自己来处理不太现实,于是一直找寻找这样的工具,终于让我发现了jaxb2-maven-plugin: http://www.mojohaus.org/jax ...

  8. taro+vue3模板-废弃

    一.初始化 1.Taro 基本安装并初始化项目 npx @tarojs/cli init WechatAppDemo 2.cd到新项目的文件夹 3.安装依赖:yarn 4.运行预览: yarn dev ...

  9. Tomcat 的连接数与线程池

    一.背景 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 Tomcat配置文件server.xm ...

  10. CF1528D It's a bird! No, it's a plane! No, it's AaParsa!

    个人思路: floyd 求最短路,\(\Theta(n^3)\) 不能维护边的变化. 然后就不会做了. 正解: 首先,对于每个起始点,到达一个点 \(v\) 越早越好,因为可以等待. 边的变化相当于每 ...