这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
一:变量
变量的三种使用方式
(1)指定变量类型,声明后不复制,用默认值
package main
import (
"fmt"
)
func main(){
var i int
fmt.println("i="+i)
(2)根据值自行推导变量类型;
var i=10.11
fmt.println("i="+i)
(3)省略var,注意:等号左侧的变量不应该是已经声明果的,否则会导致编译报错
i:="tom"
fmt.println("i="+i)
多变量声明
一次声明多个变量:
(1)第一种方式
var n1,n2,n3 int
fmt.println("n1=",n1,"n2=",n2,"n3=",n3)
(2)第二种方式
var n1,n2,n3=100,"tom",888
fmt.println("n1=",n1,"n2=",n2,"n3=",n3)
一次声明多个全局变量(再函数外部定义的变量就是全局变量):
//定义全局变量
var n1=100
var n2=200
n3="tom"
//上面的声明方式,也可以改成一次性声明
var (
n3=300
n4=900
n5="mary"
)
该区域的数据值可以在同一类型范围内不断变化
//该区域的数据值可以在同一类型范围内不断变化
var i int=10
i=30
i=50
fmt.Println("i=",i)
i=1.2//错误,原因是不能改变数据类型
变量在统一作用域(在同一函数或者在代码块)内不能重名
var i int=59
i:=99
//错误
Golang变量如果没有赋初值,编译器会使用默认值,比如int默认值为0,string默认值为空串
二:数据类型
整数类型
整型的使用细节
- Golang 各整数类型分:有符号和无符号,int uint 的大小和系统有关。
- Golang 的整型默认声明为 int 型,在程序查看某个变量的字节大小和数据类unsafe.Sizeof()函数可以返回变量占用的字节数
- Golang 程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。
- bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。
小数类型/浮点型
小数类型分类
-
关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位,说明:浮点数都是有符号的.
-
尾数部分可能丢失,造成精度损失。 -123.0000901
说明:float64 的精度比 float32 的要准确. 说明:如果我们要保存一个精度高的数,则应该选用 float64 3) 浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失
布尔类型
1:基本介绍
- 布尔类型也叫 bool 类型,bool 类型数据只允许取值 true 和 false
- bool 类型占 1 个字节。
- bool 类型适于逻辑运算,一般用于程序流程控制
string类型
1:基本介绍
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本
指针
1:基本介绍
- 基本数据类型,变量存的就是值,也叫值类型
- 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num
- 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值比如:var ptr *int = &num
- 获取指针类型所指向的值,使用:*,比如:var ptr int, 使用ptr 获取 ptr 指向的值 2:案例
- 写一个程序,获取一个 int 变量 num 的地址,并显示到终端
- 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值.
3:指针使用细节
- 值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是 *int, float32对应的指针类型就是 *float32, 依次类推。
- 值类型包括:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
值类型和引用类型
1.值类型和引用类型的说明
- 值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
- 引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型 2 .值类型和引用类型的使用特点
- 值类型:变量直接存储值,内存通常在栈中分配
- 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收
- 内存的栈区和堆区示意图
标识符命名注意事项
1:包名:保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和标准库冲突 fmt
2:变量名、函数名、常量名:采用驼峰法举例:var stuName string = “tom” 形式: xxxYyyyyZzzz ...
3:如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包使用 ( 注:可以简单的理解成,首字母大写是公开的,首字母小写是私有的) ,在 golang 没有public ,private 等关键字。