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

news2024/11/24 16:59:13

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() 获取
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基于ssm的的律师事务所预约管理系统的设计与实现

网站前台:关于我们、帮助信息、法律资讯、律师信息、服务信息、服务评价管理员功能 1、管理关于我们、帮助信息 2、管理资讯类型、添加法律资讯 3、添加律师信息(姓名、特长、照片、描述等等 ) 管理服务类型信息(讨薪、民事、刑事等等]、查看服务信息4 5、查看试题信息、查看试…

调用api key使用chatgpt,缓解chatgpt封控

前言: 现在国内的很多网页版的chatgpt网页随处可见 ,但是很多都是3.5的接口,而且有些还有次数限制,毕竟现在4.0的api贵的离谱,在前期注册的chatgpt账号,其实官方是赠送有18美金的api额度供我们使用&#x…

Solaris Network:BSC上首个链上合成资产解决方案

Solaris Network 是一个开创性的项目,为 Binance Smart Chain(BSC)提供链上合成资产解决方案。Solaris 通过在区块链和实际金融领域之间搭建一座独特的桥梁,为多链 Web 3.0 金融衍生品市场奠定了全面基础设施。 本技术分析探讨了 …

MySQL 日期时间函数

文章目录 日期时间函数1. now()2. curdate()3. curtime()4. week(date)5. year(date)、month(date)、day(date)6. datediff(date1,date2)7. adddate(date,n) 日期时间函数 日期操作是 MySQL 中的常用操作,掌握常用的日期时间函数并熟练组合运用,能够帮助…

web的基本漏洞--弱口令漏洞

目录 一、弱口令漏洞介绍 1.弱口令漏洞的原理 2.漏洞识别 3.攻击方式 4.漏洞的危害 5.漏洞防御 二、弱口令漏洞的攻击方式-暴力破解 1.暴力破解的一般流程 2.token并不能有效的防范暴力破解漏洞 3.防范暴力破解常见方法 一、弱口令漏洞介绍 弱口令漏洞是指系统登录口…

港联证券|散户为什么会追涨杀跌?如何避免?

股市是一个充满机会的地方,每天都有大量投资者在里面寻求财富。然而股市中很多散户都是亏损的,一个重要原因就是喜欢追涨杀跌。那么散户为什么会追涨杀跌?如何避免?港联证券也为大家准备了相关内容,以供参考。 散户为什…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - 机器学习的可解释性

文章目录 一、为什么我们需要可解释性的机器学习二、可解释性的 vs 强大的(Powerful)三、可解释性机器学习的目标四、可解释性的机器学习4.1 Local Explanation 局部的解释4.1.1 特征重要性4.1.2 模型怎么处理数据的?4.1.2.1 可视化4.1.2.2 P…

分割回文串

1题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s "aab" 输出:[["a","…

糖化学试剂2199491-27-3,L-Glutamamide,激肽释放酶抑制剂肽,信息说明

试剂基团反应特点(Reagent group reaction characteristics): L-Glutamamide(糖化学试剂)激肽释放酶抑制剂肽,陕西新研博美生物科技有限公司提供多肽合成、多肽定制、同位素标记肽、生物素标记肽、荧光标记…

【七】设计模式~~~结构型模式~~~桥接模式(Java)

【学习难度:★★★☆☆,使用频率:★★★☆☆】 2.1. 模式动机 在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色&am…

Android 应用快捷(shortcut)功能的详解(一)

一、介绍 在现如今的应用中,一些开发者为了把核心的业务尽快的方便让使用者触摸到,想尽各种办法。比如前期的桌面插件,点击直接拉起核心业务。现在我们在主流的APP中,只要你长按桌面快捷键,发现弹出来的是不是单一的卸…

MapReduce实战案例(2)

案例二: MR实战之数据分类输出(自定义outputFormat) 2.1 项目准备 需求 现有一些原始日志需要做增强解析处理,流程: a) 从原始日志文件中读取数据b) 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志c) 如果成功增强,则输出…

提升日期处理效率:day.js 实战经验分享

theme: smartblue 本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。本文并不能代替 day.js 官方文档,日常工作中该查文档的还是要查文档。本文是写给刚接触 day.js 的工友,让这部分工友能更顺利上手 day.js。本文不涉…

SMESwin Unet:融合CNN和Transformer进行医学图像分割

文章目录 SMESwin Unet: Merging CNN and Transformer for Medical Image Segmentation摘要本文方法SuperpixelMCCT SMESwin Unet: Merging CNN and Transformer for Medical Image Segmentation 摘要 视觉Transformer 是自去年以来医学图像分割领域最受欢迎的新范式&#xf…

ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。解决方案

序 1、参考博文》①严格模式 - 知乎,②ts的tsconfig.son中文说明③TypeScript Number | 菜鸟教程 2、解决(ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。) 3、解决(函数内this是undefined 的问题&#xf…

汽车EDI:如何与Stellantis建立EDI连接?

Stellantis 是一家实力雄厚的汽车制造公司,由法国标致雪铁龙集团(PSA集团)和意大利菲亚特克莱斯勒汽车集团(FCA集团)合并而成,是世界上第四大汽车制造商,拥有包括标致、雪铁龙、菲亚特、克莱斯勒…

Hive学习---1、Hive入门、Hive 安装

1、Hive入门 1.1 什么是Hive 1、Hive简介 Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。 2、Hive本质 Hive是一个Hadoop客户端,用于将HQL(Hive SQL…

【六一为孩子建模吧】沐风老师3DMAX建模雕刻插件SculptTool使用教程

3DMAX建模雕刻插件,该工具旨在使对角色和地形等有机模型进行小型编辑成为可能,而无需离开3dMax并启动如ZBrush等专用雕刻应用程序,就可以在3DMAX中直接对小型模型进行简单的雕刻建模处理,这样会方便很多。 【适用版本】 3dMax202…

【C++初阶】:string类

string 一string的基本用法二.迭代器1.基本使用2.语法糖3.反向迭代器4.const迭代器 三.容量四.插入和删除五.一个例题:解析协议六.读取空格七.一些其他函数 一string的基本用法 文档里 一般使用 二.迭代器 1.基本使用 string里重载了一种非常厉害的运算符[ ] 这个运…

【web安全】文件包含漏洞

目录 1.什么是文件包含漏洞 2.产生原因 3.文件包含的类型 3.1本地文件包含 3.2远程文件包含 4.攻击利用手法 4.1 file:协议 4.2 php://协议 ​4.3 zip://,bzip2://,zlib://协议 4.4 data://协议 4.5 PHP伪协议总结 5.如何防御? 6.常见系统的默认路径…