您现在的位置是:首页 >其他 >Golang指针, 值类型,标识符,关键字,运算符初始网站首页其他

Golang指针, 值类型,标识符,关键字,运算符初始

一个运维小青年 2024-07-11 08:06:33
简介Golang指针, 值类型,标识符,关键字,运算符初始

Golang指针, 值类型,标识符,关键字,标识符

采用文章
https://www.runoob.com/go/go-operators.html

image-20230522100906676

本章使用go练习工具
https://tour.go-zh.org/welcome/1

指针

基本介绍

  1. 基本数据类型,变量存的就是值,也叫值类型
  2. 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num
    分析一下基本数据类型在内存的布局

image-20230530101701878

  1. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
    比如:var ptr *int = &num
    举例说明:指针在内存的布局

image-20230530101757450

  1. 获取指针类型所指向的值,使用:*,比如: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)
}

image-20230530101933373

image-20230530102158237

  1. 一个案例再说明

image-20230530102017757

案例演示

1) 写一个程序,获取一个 int 变量 num 的地址,并显示到终端
2) 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值.

image-20230530102325364

指针的课堂练习

image-20230530102346590

指针的使用细节

  1. 值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是 *int, float32
    对应的指针类型就是 *float32, 依次类推。
  2. 值类型包括:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struc

值类型和引用类型

3.17.1 值类型和引用类型的说明

  1. 值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 stru

  2. 引用类型:指针、slice 切片、map、管道 chan、interface 等都

值类型和引用类型的使用特点

  1. 值类型:变量直接存储值,内存通常在栈中分配 示意图:

image-20230530102610978

  1. 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆 上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收 示意图:

image-20230530102634124

  1. 内存的栈区和堆区示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S983iDrr-1685416402628)(https://tianmingqing.oss-cn-hangzhou.aliyuncs.com/aike/image-20230530102645276.png)]

标识符的命名规范

标识符概念
  1. Golang 对各种变量、方法、函数等命名时使用的字符序列称为标识符
  2. 凡是自己可以起名字的地方都叫标识符

标识符的命名规则

  1. 由 26 个英文字母大小写,0-9 ,_ 组
  2. 数字不可以开头。var num int //ok var 3num int //error
  3. Golang 中严格区分大小写。
    var num int
    var Num int
    说明:在 golang 中,num 和 Num 是两个不同的变量
  4. 标识符不能包含空格。

image-20230530104114612

  1. 下划线"_"本身在 Go 中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但 是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用

image-20230530104150062

  1. 不能以系统保留关键字作为标识符(一共有 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
标识符命名注意事项
  1. 包名:保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和 标准库不要冲突 fm

image-20230530104300944

  1. 变量名、函数名、常量名:采用驼峰法
    举例:
    var stuName string = “tom” 形式: xxxYyyyyZzzz …
    var goodPrice float32 = 1234.5
  2. 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能
    在本包中使用 ( 注:可以简单的理解成,首字母大写是公开的,首字母小写是私有的) ,在 golang 没有
    public , private 等关键

image-20230530104332585

image-20230530104344161

系统保留关键字

image-20230530104437067

系统的预定义标识符

image-20230530104459092

运算符

运算符的基本介绍

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等

1) 算术运算符
2) 赋值运算符
3) 比较运算符/关系运算符
4) 逻辑运算符
5) 位运算符
6) 其它运算符

4.2 算术运算符
算术运算符是对数值类型的变量进行运算的,比如:加减乘除。在 Go 程序中使用的非常多
4.2.1算术运算符的一览表

image-20230530104646384

4.2.2案例演示

案例演示算术运算符的使用。 +, - , * , / , %, ++, – , 重点讲解 /、% 自增:++ 自减:–

演示 / 的使用的特

image-20230530104833244

演示 % 的使用特点
// 演示 % 的使用
// 看一个公式 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) //
++ 和 --的使用

image-20230530104913796

算术运算符使用的注意事项

  1. 对于除号 “/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃
    小数部分。 例如: x := 19/5 ,结果是 3
  2. 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
  3. Golang 的自增自减只能当做一个独立语言使用时,不能这样使用

image-20230530105036849

  1. Golang 的++ 和 – 只能写在变量的后面,不能写在变量的前面,即:只有 a++ a-- 没有 ++a --a

image-20230530105058543

  1. Golang 的设计者去掉 c / java 中的 自增自减的容易混淆的写法,让 Golang 更加简洁,统一。(强 制性的
课堂练习

image-20230530105122334

课堂练习 2
  1. 假如还有 97 天放假,问:xx 个星期零 xx 天

  2. 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏
    温度对应的摄氏温度

image-20230530105228954

关系运算符(比较运算符)

基本介绍
  1. 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false
  2. 关系表达式 经常用在 if 结构的条件中或循环结构的条件中

关系运算符一览图

image-20230530105329670

案例演示

image-20230530105344285

关系运算符的细节说明
1) 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false。
2) 关系运算符组成的表达式,我们称为关系表达式: a > b
3) 比较运算符"=="不能误写成 "=" !!

逻辑运算符

基本介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值
逻辑运算的说明

image-20230530105615778

案例演示

image-20230530105720148

image-20230530105747670

注意事项和细节说明
  1. &&也叫短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false
  2. ||也叫短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true
  3. 案例演示

image-20230530105828679

赋值运算符

基本的介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。

赋值运算符的分类

image-20230530105909380

赋值运算的案例演示
  1. 赋值基本案例
  2. 有两个变量,a 和 b,要求将其进行交换,最终打印结果
  3. += 的使用案例
    image-20230530105954971

4.5.4赋值运算符的特点 1) 运算顺序从右往左

image-20230530110016818

  1. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值

image-20230530110030371
3) 复合赋值运算符等价于下面的效果 比如:a += 3 等价于 a = a + 3

面试题

有两个变量,a 和 b,要求将其进行交换,但是不允许使用中间变量,最终打印结果
image-20230530110129733

位运算符

image-20230530110150015

其它运算符说明

其它运算符说明image-20230530110209316

举例说明

image-20230530110249534

课堂案例

案例 1:求两个数的最大

image-20230530110312680

案例 2:求三个数的最大

image-20230530110334483

特别说明

image-20230530110407835

image-20230530110416372

运算符的优先级

运算符的优先级的一览表

image-20230530110450430

对上图的说明
1) 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
2) 只有单目运算符、赋值运算符是从右向左运算的。
3) 梳理了一个大概的优先级
1:括号,++, -- 2: 单目运算
3:算术运算符
4:移位运算
5:关系运算符
6:位运算符
7:逻辑运算符
8:赋值运算符
9:逗号

键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go

4.10.2 步骤 :

  1. 导入 fmt 包
  2. 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()

image-20230530111127747
image-20230530111137387

案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】。

  1. 使用 fmt.Scanln() 获取
    image-20230530111206101

  2. 使用 fmt.Scanf() 获
    image-20230530111225532

键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go

4.10.2 步骤 :

  1. 导入 fmt 包
  2. 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()
    在这里插入图片描述

案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】。

  1. 使用 fmt.Scanln() 获取
    在这里插入图片描述

  2. 使用 fmt.Scanf() 获取
    在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。