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

news/2024/11/14 14:16:38/

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 mainimport "fmt"func main() {// 定义一个整数类型变量 x 并赋值为 42x := 42// 定义一个指向整数类型的指针变量 ptr 并将其赋值为 x 的地址var ptr *int = &x// 打印指针 ptr 的值和所指向的值fmt.Println("ptr 的值为:", ptr)fmt.Println("ptr 指向的值为:", *ptr)// 修改 x 的值,并通过指针 ptr 获取它的新值x = 99fmt.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() 获取
    在这里插入图片描述


http://www.ppmy.cn/news/106170.html

相关文章

CodeForces..翻转魔术.[简单].[].[]

题目描述: 题目解读: 给定由0,1组成的长度为n的字符串,执行翻转操作,即0变1,1变0; 判断执行一次翻转之后是否为回文。 解题思路: 寻找规律:如果翻转前已经是回文&…

牛客网基础语法11~20题

前言:今天是咱们第二期刷牛客网上的题目。 目标:对输入输出的格式,方法,类型掌握熟练,对double,float理解深入,编程思想更进一步。 鸡汤:人活着,再苦再累,都别…

【Java 继承】了解Java类的继承的特点,继承的关系,继承的使用,到底什么是继承?

博主:_LJaXi Or 東方幻想郷 专栏: Java | 从入门到入坟 Java 继承 继承的特点 \ 介绍 ❓特点 ♊ 继承的使用方式 🔞避免重复方法 子类访问父类的成员变量 🈲子类访问父类的成员变量(直接访问)访问父类与子类…

2023年6月18日DAMA-CDGA/CDGP数据治理认证报名到这里

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

APP开发中的UI设计

UI设计是 APP开发中一个必不可少的部分,用户体验也是影响 APP产品成功与否的重要因素,用户体验包括用户的使用感受和操作感受。就 UI设计来说,它的主要内容有:界面、图标、颜色、字体、布局、页面布局等。 一个好的 UI设计可以增加…

抖音seo源码开发-

抖音seo源码开发,抖音seo开源定制,抖音seo源码交付,抖音seo源码开发是一项重要的技术,可以将您的抖音号排名提升到更高的位置,帮助您吸引更多的关注和粉丝。SEO源码开发需要具备一定的技术和经验,因此建议在…

opencv_c++学习(三十)

一、加载深度神经网络模型 Net cv:dnn::readNet(const String & model, const String & config "", const String & framework "")model:模型文件名称 config:配置文件名称 framework:框架种类 Net类中的函数名称以及作用: 向…

dataV教程-浅用dataV

一别多日,好久没有和大家相见了。其一的原因是因为公司的项目,其二就是因为太懒了。现在给大家浅浅的介绍一下这个好用的大屏展示框架吧。如果后续有深入的话,我会出一个详解版本的。 一、dataV介绍 前言:由于当前的大数据时代,…