golang第三卷---常量指针

常量指针

  • 常量
  • 指针
  • 类型别名
  • 注释

常量

Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。

声明格式:

const name [type] = value

type可以省略

和变量声明一样,可以批量声明多个常量:

const (e  = 2.7182818pi = 3.1415926
)

如果是批量声明的常量,除了第一个外其它的常量右边的初始化表达式都可以省略,如果省略初始化表达式则表示使用前面常量的初始化表达式,对应的常量类型也是一样的。例如:

const (a = 1bc = 2d
)
fmt.Println(a, b, c, d) // "1 1 2 2"

iota 常量生成器

常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。

在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加1
如:

const (Sunday  = iota //0MondayTuesdayWednesdayThursdayFridaySaturday  //6
)

指针

指针(pointer)在Go语言中可以被拆分为两个核心概念:

  • 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。
  • 切片(可变数组),由指向起始元素的原始指针、元素数量和容量组成。

指针理解:在内存中开辟了一片空间,空间内存放着数值10,这片空间在整个内存当中,有一个唯一的地址,用来进行标识,指向这个地址的变量就称为指针

一个指针变量可以指向任何一个值的内存地址,它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。
当一个指针被定义后没有分配到任何变量时,它的默认值为 nil。
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。
Go语言中使用在变量名前面添加&操作符(前缀)来获取变量的内存地址(取地址操作)

当使用&操作符对普通变量进行取地址操作并得到变量的指针后,可以对指针使用*操作符,也就是指针取值

取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值

创建指针的另一种方法:
new() 函数可以创建一个对应类型的指针,创建过程会分配内存,被创建的指针指向默认值。

new(类型)

类型别名

格式:

//TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类型,就像一个孩子小时候有小名、乳名,上学后用学名,英语老师又会给他起英文名,但这些名字都指的是他本人。
type TypeAlias = Type

还有一种是类型定义:

//定义Name为Type类型 ,定义之后 Name为一种新的类型
type Name Type

两种方法区别:

package main
import ("fmt"
)
// 将NewInt定义为int类型
type NewInt int
// 将int取一个别名叫IntAlias
type IntAlias = int
func main() {// 将a声明为NewInt类型var a NewInt`//单行注释`// 查看a的类型名 main.NewIntfmt.Printf("a type: %T\n", a)// 将a2声明为IntAlias类型var a2 IntAlias// 查看a2的类型名 int //IntAlias 类型只会在代码中存在,编译完成时,不会有 IntAlias 类型。fmt.Printf("a2 type: %T\n", a2)
}

注释

单行注释:

//单行注释

多行注释:

/*
第一行注释
第二行注释
...
*/

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

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

相关文章

基于Java SSM框架实现实现中国古诗词学习平台项目【项目源码】计算机毕业设计

基于java的SSM框架实现中国古诗词学习平台系统演示 JSP技术介绍 JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了用…

如何在 Ubuntu 16.04 上使用 Minio 设置对象存储服务器

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 介绍 从基于云的备份解决方案到高可用性内容交付网络 (CDN),对象存储已成为现代技术领域不可或缺的…

2023 山东 信息安全管理与评估 选择题答案 仅供参考

一、 单选题(每题 2 分,共 35 题,共 70 分) 1.将用户user123修改为管理员权限命令是( C )。 A. net user localgroup administrators user123 /add B. net use localgroup administrators user123 /add…

FindMy技术用于遥控器

遥控器已经悄然成为我们生活中的常客。无论是控制电视机的开关,调整音量,切换频道,还是控制空调的温度,调节灯光亮度,甚至远程操控智能家居设备,遥控器都为我们提供了极大的便利。 将遥控器与FindMy技术相结…

人工通用智能AGI

GPT图解大模型 GPT4-点亮人工智能的火花 以GPT-4 为代表的大级模语有模型Large-scale Language Model,LLM,也称大模型)是使用前所未有的计算参数和海数据进行训练得到的。 它们在各种领域和任务中表现出非凡的能力,挑战了我们对学习和认知的…

Linux内核并发与同步机制解读(arm64)上

关键词 原子操作、自旋锁、信号量、mutex、读写锁、percpu-rwsem 概述 从浅到深,逐步分析各种同步机制的功能。 1、原子操作 解决“读-修改-回写”的完整性,一般用于静态全局变量的保护,静态全局变量的操作过程. 例如,我们写一…

【计算机网络】快速做题向 极限数据传输率的计算(有噪声/无噪声)

首先需要理解什么是码元 码元在课本上的概念比较难理解 但是只要记住 二进制码元在图上显示的就是有两种高度的横杠“—”(对应0,1),即,有两种二进制码元 四进制就是有四种高度的横杠“—”(对应00&…

【C语言】一篇文章深入解析联合体和枚举且和结构体的区别

文章目录 📝前言🌠 联合体类型的声明🌉联合体的特点 🌠相同成员的结构体和联合体对⽐🌉联合体⼤⼩的计算 🌠联合体应用🌉枚举类型的声明 🌠枚举类型的优点🌉 枚举类型的使…

方案:智能分析网关V4在高校实验室安全管理中的应用

一、方案背景 实验室作为科研与教学的核心场所,其重要性不言而喻。高校实验室由于其开放性与多样性,安全管理尤为重要。高校实验室的安全管理,不仅是保障科研与教学质量的基础,更是校园安全的重要组成部分。一旦发生安全事故&…

LabVIEW在电机噪声与振动探测的应用

LabVIEW在电机噪声与振动探测的应用 硬件部分是电机噪声和振动测试分析系统的基础,主要由三大核心组件构成:高灵敏度振动传感器、先进的信号调理电路和高性能数据采集卡。这些设备协同工作,确保了从电机捕获的噪声和振动信号的准确性和可靠性…

山西电力市场日前价格预测【2023-12-28】

日前价格预测 预测说明: 如上图所示,预测明日(2023-12-28)山西电力市场全天平均日前电价为814.30元/MWh。其中,最高日前电价为1500.00元/MWh,预计出现在08:00~08:45,17:00~20:15。最低日前电价为394.61元/…

Vue3-29-路由-编程式导航的基本使用

补充一个知识点 路由配置中的 name 属性 : 可以给你的 路由 指定 name属性,称之为 命名路由。 这个 name 属性 在 编程式导航 传参时有重要的作用。 命名路由的写法如下 : 像指定 path 一样,直接指定一个 name 属性即可。{path:/d…

ubuntu 安装apisix -亲测可用

官方未提供在ubuntu系统中安装apisix的方式,似乎只能通过源码方式安装,但是并不推荐,非常容易失败, 具体操作方式如下: ubuntu和Debian其实类似的,可使用DEB方式安装,如下截图 注意&#xff1…

实用的二进制文件分割器

自己写的一个能方便分割文件的小工具 1.可以按照任意方式分割文件 (1)分割范围 (2)分割块大小 (3)分割份数 (4)可以反向分割(从文件末尾向文件头分割) 2.可以指定输出文件名规则 (1)文件名前缀 (2)文件名序号 (3)文件名后缀(扩展名) (4)文件名…

python + flask+nginx+mysql环境安装详解

一、下载安装Nginx服务 运行以下命令安装Nginx。 yum -y install nginx 运行以下命令查看Nginx版本。 nginx -v 返回结果如下所示,表示Nginx安装成功。 nginx version: nginx/1.20.1 二、安装Mysql5.7 运行以下命令更新YUM源。 rpm -Uvh http://dev.mysql.com/get…

Arduino驱动TMF8801 ToF激光测距传感器(距离传感器)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 <

【游戏】如何开发一款游戏:游戏开发流程及所需工具

游戏作为娱乐生活的一个方面&#xff0c;参与其中的人越来越多&#xff0c;而大部分参与其中的人都是以玩家的身份。 他们热爱一款游戏&#xff0c;或是被游戏的故事情节、炫丽的场景、动听的音乐所艳羡&#xff0c;亦或是被游戏中角色扮演、炫酷的技能、有趣的任务所吸引&…

Ansible Windows批量安装软件

文章目录 1&#xff1a;Windows配置WINRM2: ansible安装3&#xff1a;操作步骤3.1 配置主机清单3.2 测试ansible执行命令3.3 测试安装7Z ansible操作通过winrm协议windows&#xff0c;经过实践精简以下方法能快速配置&#xff0c;并能通过测试 更多文档参考: 支持的windows版本…

vscode 支持c,c++编译调试方法

概述&#xff1a;tasks.jason launch.json settings.json一定要有&#xff0c;没有就别想跑。还有就是c 和c配置有区别&#xff0c;切记&#xff0c;下文有说 1.安装扩展插件。 2.安装编译器&#xff0c;gcc.我用的是x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z &#xf…

Linux之缓冲区的理解

目录 一、问题引入 二、缓冲区 1、什么是缓冲区 2、刷新策略 3、缓冲区由谁提供 4、重看问题 三、缓冲区的简单实现 一、问题引入 我们先来看看下面的代码&#xff1a;我们使用了C语言接口和系统调用接口来进行文件操作。在代码的最后&#xff0c;我们还使用fork函数创建…