Golang学习之---Golang的变量与数据类型(一)

参考API Go语言中文网:https://studygolang.com/pkgdoc
菜鸟教程:https://www.runoob.com/go/go-ide.html
------SDK及安装工具下载,参考 word文档
参考尚硅谷韩顺平老师视频
这里的总结只是把初学时不懂的知识点列出来,系统性的知识参考《尚硅谷_韩顺平_Go语言核心编程.pdf》和 代码 goproject

一、变量

不管使用哪种高级程序语言编写程序,变量都是程序的基本组成单位
变量 = 变量名 + 值 + 数据类型

二、常量

  • 1、常量是一个简单值的标识符,在程序运行时,不会被修改的量。
  • 2、常量中的数据类型只可以是:①bool、数字型(②整数型、③浮点型和④复数)和⑤字符串型。
  • 3、常量的定义格式:const identifier [type] = value
    显式类型定义:const b string = "abc"
    隐式类型定义:const b = "abc" // 类型推导
    多个同时声明 const a1, a2, a3, a4  = "121", 'a', 10, true

三、数据类型

在Go编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才申请大内存,就可以充分利用内存。

2.1、数据类型的基本介绍

  • int8 一个字节(byte)
  • uint代表无符号数
  • Go的编码是utf-8
  • 在Go中的编码方式为utf8,在utf8中一个汉字占三个字节。所以一个byte不能存储一个汉字。至少int32才能够三个字节
  • 结构体,相当于Java中的class类
  • 管道,用来做高并发
  • 切片类似于动态数组
  • bit:计算机中的最小存储单位。byte:计算机中基本存储单元。1 byte= 8 bit

如下图官网介绍:

三、基本数据类型

3.1 基本数据类型--数值型

3.1.1 整数类型(简称,整型)的使用
参考代码和pdf

3.1.2 浮点类型的使用

浮点数常量有两种表示形式:
一、十进制数形式:如:5.12   .512(0可以省略,小数点必须有)
二、科学计数法形式:如:5.12e2 = 5.12 * 10 的2次方
                                           5.12E-2 = 5.12 / 10 的2次方

3.2 基本数据类型--字符类型 的使用

3.3 基本数据类型--布尔类型bool 的使用

3.4 基本数据类型--string类型 的使用

3.5 基本数据类型的默认值,也叫零值

3.6 基本数据类型的相互转换

和Java不同之处,都是显式转换,没有自动转换

3.7 基本数据类型和string的相互转换

四、派生/复杂数据类型

4.1 指针Pointer

  1. 基本数据类型,变量存的就是值,也叫值类型
    指针类型,变量存的是一个地址(值的地址)
  2. 获取变量的地址用&。比如:var i int = 10,获取i的地址:&i
  3. 基本数据类型在内存中的布局:
  4. 指针类型,指针变量存的是一个地址,这个地址指向的空间才是值。
    比如:var ptr *int = &i,
    ptr,输出ptr的值=&i,也就是i的地址
    &ptr,ptr本身的地址
    *ptr,ptr指向的值,也就是10
  5. 指针类型在内存中的布局:

4.2 值类型和引用类型

  • 1、值类型,都有对应的指针类型,形式为 *数据类型。
    比如,int对应的指针就是 *int;float32 对应的指针类型是 *float32,依此类推。
  • 2、值类型:基本数据类型中的①int系列、②float系列、③bool、④string;派生/复杂数据类型中的⑤数组、⑥结构体struct
  • 3、引用类型①指针、②切片slice、③map、④管道、⑤interface
  • 使用特点
  • 3.1)值类型:变量直接存储值,内存通常在栈中分配。示意图:
  • 3.2)引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间成为一个垃圾,由GC回收。示意图:
  • 3.3)内存的栈区和堆区示意图:
  • 3.4)逃逸现象

五、堆和栈

从数据存储来说,可以分为:栈和堆
堆和栈都是逻辑概念
甚至有的编译器把堆和栈的区别都取消了,如Golang中区分的就不是很明确,主要是根据变量到底使用多长时间来决定放在堆或栈,存在时间长就放堆里,否则栈区。如果想要放堆区,可以做逃逸分析

猜你喜欢

转载自blog.csdn.net/qq_37358143/article/details/106951616