Golang指针, 值类型,标识符,关键字,标识符
采用文章
https://www.runoob.com/go/go-operators.html
本章使用go练习工具
https://tour.go-zh.org/welcome/1
指针
基本介绍
- 基本数据类型,变量存的就是值,也叫值类型
- 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num
分析一下基本数据类型在内存的布局
- 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
比如:var ptr *int = &num
举例说明:指针在内存的布局
- 获取指针类型所指向的值,使用:*,比如:var ptr int, 使用ptr 获取 ptr 指向的值
package main
import "fmt"
func main() {
// 定义一个整数类型变量 x 并赋值为 42
x := 42
// 定义一个指向整数类型的指针变量 ptr 并将其赋值为 x 的地址
var ptr *int = &x
// 打印指针 ptr 的值和所指向的值
fmt.Println("ptr 的值为:", ptr)
fmt.Println("ptr 指向的值为:", *ptr)
// 修改 x 的值,并通过指针 ptr 获取它的新值
x = 99
fmt.Println("x 的新值为:", x)
fmt.Println("ptr 指向的值为:", *ptr)
}
- 一个案例再说明
案例演示
1) 写一个程序,获取一个 int 变量 num 的地址,并显示到终端
2) 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值.
指针的课堂练习
指针的使用细节
- 值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是 *int, float32
对应的指针类型就是 *float32, 依次类推。 - 值类型包括:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struc
值类型和引用类型
3.17.1 值类型和引用类型的说明
-
值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 stru
-
引用类型:指针、slice 切片、map、管道 chan、interface 等都
值类型和引用类型的使用特点
- 值类型:变量直接存储值,内存通常在栈中分配 示意图:
- 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆 上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收 示意图:
- 内存的栈区和堆区示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S983iDrr-1685416402628)(https://tianmingqing.oss-cn-hangzhou.aliyuncs.com/aike/image-20230530102645276.png)]
标识符的命名规范
标识符概念
- Golang 对各种变量、方法、函数等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
标识符的命名规则
- 由 26 个英文字母大小写,0-9 ,_ 组
- 数字不可以开头。var num int //ok var 3num int //error
- Golang 中严格区分大小写。
var num int
var Num int
说明:在 golang 中,num 和 Num 是两个不同的变量 - 标识符不能包含空格。
- 下划线"_"本身在 Go 中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但 是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用
- 不能以系统保留关键字作为标识符(一共有 25 个),比如 break,if 等等…
标识符的案例
hello // ok
hello12 //ok
1hello // error ,不能以数字开头
h-b // error ,不能使用 - x h // error, 不能含有空格
h_4 // ok
_ab // ok
int // ok , 我们要求大家不要这样使用
float32 // ok , 我们要求大家不要这样使用
_ // error
Abc // ok
标识符命名注意事项
- 包名:保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和 标准库不要冲突 fm
- 变量名、函数名、常量名:采用驼峰法
举例:
var stuName string = “tom” 形式: xxxYyyyyZzzz …
var goodPrice float32 = 1234.5 - 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能
在本包中使用 ( 注:可以简单的理解成,首字母大写是公开的,首字母小写是私有的) ,在 golang 没有
public , private 等关键
系统保留关键字
系统的预定义标识符
运算符
运算符的基本介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
1) 算术运算符
2) 赋值运算符
3) 比较运算符/关系运算符
4) 逻辑运算符
5) 位运算符
6) 其它运算符
4.2 算术运算符
算术运算符是对数值类型的变量进行运算的,比如:加减乘除。在 Go 程序中使用的非常多
4.2.1算术运算符的一览表
4.2.2案例演示
案例演示算术运算符的使用。 +, - , * , / , %, ++, – , 重点讲解 /、% 自增:++ 自减:–
演示 / 的使用的特
演示 % 的使用特点
// 演示 % 的使用
// 看一个公式 a % b = a - a / b * b
fmt.Println("10%3=", 10 % 3) // =1
fmt.Println("-10%3=", -10 % 3) // = -10 - (-10) / 3 * 3 = -10 - (-9) = -1
fmt.Println("10%-3=", 10 % -3) // =1
fmt.Println("-10%-3=", -10 % -3) //
++ 和 --的使用
算术运算符使用的注意事项
- 对于除号 “/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃
小数部分。 例如: x := 19/5 ,结果是 3 - 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
- Golang 的自增自减只能当做一个独立语言使用时,不能这样使用
- Golang 的++ 和 – 只能写在变量的后面,不能写在变量的前面,即:只有 a++ a-- 没有 ++a --a
- Golang 的设计者去掉 c / java 中的 自增自减的容易混淆的写法,让 Golang 更加简洁,统一。(强 制性的
课堂练习
课堂练习 2
-
假如还有 97 天放假,问:xx 个星期零 xx 天
-
定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏
温度对应的摄氏温度
关系运算符(比较运算符)
基本介绍
- 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false
- 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
关系运算符一览图
案例演示
关系运算符的细节说明
1) 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false。
2) 关系运算符组成的表达式,我们称为关系表达式: a > b
3) 比较运算符"=="不能误写成 "=" !!
逻辑运算符
基本介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值
逻辑运算的说明
案例演示
注意事项和细节说明
- &&也叫短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false
- ||也叫短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true
- 案例演示
赋值运算符
基本的介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
赋值运算符的分类
赋值运算的案例演示
- 赋值基本案例
- 有两个变量,a 和 b,要求将其进行交换,最终打印结果
- += 的使用案例
4.5.4赋值运算符的特点 1) 运算顺序从右往左
- 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
3) 复合赋值运算符等价于下面的效果 比如:a += 3 等价于 a = a + 3
面试题
有两个变量,a 和 b,要求将其进行交换,但是不允许使用中间变量,最终打印结果
位运算符
其它运算符说明
其它运算符说明
举例说明
课堂案例
案例 1:求两个数的最大
案例 2:求三个数的最大
特别说明
运算符的优先级
运算符的优先级的一览表
对上图的说明
1) 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
2) 只有单目运算符、赋值运算符是从右向左运算的。
3) 梳理了一个大概的优先级
1:括号,++, -- 2: 单目运算
3:算术运算符
4:移位运算
5:关系运算符
6:位运算符
7:逻辑运算符
8:赋值运算符
9:逗号
键盘输入语句
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go
4.10.2 步骤 :
- 导入 fmt 包
- 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()
案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】。
-
使用 fmt.Scanln() 获取
-
使用 fmt.Scanf() 获
键盘输入语句
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go
4.10.2 步骤 :
- 导入 fmt 包
- 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()
案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】。
-
使用 fmt.Scanln() 获取
-
使用 fmt.Scanf() 获取