Golang 变量类型及其声明定义

变量类型

在Go语言中,变量可以是多种不同的类型。这些类型可以分为几个大类:

基本类型:

  • 布尔型 (bool)
  • 字符串 (string)
  • 数字类型:
  • 整型 (int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr)
  • 浮点型 (float32, float64)
  • 复数型 (complex64, complex128)

其他值类型:

  • 数组
  • 结构体 (struct)
  • 引用类型:
  • 指针 (*T)
  • 切片 ([]T)
  • 映射 (map[K]V)
  • 通道 (chan T)

接口类型:

  • 接口 (interface{})

函数类型:

  • 函数 (func)

这些类型可以组合和使用,形成更复杂的数据结构。例如,你可以有一个指向数组的指针,或者一个包含函数的结构体。一些类型,如切片、映射和通道,有特殊的内置函数或行为。

在声明变量时,如果没有明确初始化,则变量会被赋予其类型的零值。例如,布尔型的零值是false,整型是0,指针是nil等。

这是一些声明不同类型变量的例子:

var b bool // 布尔型,默认值为falsevar s string // 字符串,默认值为""(空字符串)var i int // 整型,默认值为0
var f float64 // 浮点型,默认值为0.0var c complex128 // 复数型,默认值为0 + 0ivar arr [5]int // 数组,默认每个元素为0type Person struct {Name stringAge  int
}
var p Person // 结构体,默认每个字段为其类型的零值var ptr *int // 指针,默认值为nilvar slice []int // 切片,默认值为nilvar m map[string]int // 映射,默认值为nilvar ch chan int // 通道,默认值为nilvar intf interface{} // 接口,默认值为nilvar funcVar func(int) int // 函数,默认值为nil

声明和定义

在Go语言中,变量可以通过多种方式声明和定义。以下是一些常见的方法:

  1. 使用var关键字声明变量,类型在变量名之后:
var x int
  1. 声明变量并初始化:
var y int = 10
  1. 类型推断(不显式指定类型,而是通过初始化值推断类型):
var z = 20
  1. 短变量声明(只能在函数内部使用):
a := 30
  1. 声明多个变量:
var b, c int = 40, 50
  1. 分组声明变量(通常用于全局变量):
var (d inte bool
)
  1. 声明常量(常量不能使用短变量声明语法):
const pi float64 = 3.14159
  1. 声明一个指针变量,并初始化为nil:
var p *int
  1. 声明一个指针变量,并使用new关键字分配内存:
var pointer = new(int)

这些是Go语言中变量声明和定义的基本方式。在Go中,通常推荐尽可能使用短变量声明:=,因为它使代码更加简洁。然而,var关键字在声明全局变量、声明而不初始化、以及需要明确指定变量类型时仍然非常有用

命名规范

Go语言中的命名规范遵循一些简单的原则,这些原则有助于保持代码的可读性和一致性:

  1. 通用规则:
  • 使用驼峰命名法(CamelCase)。
  • 包名应当使用小写字母,不使用下划线或驼峰命名法。
  • 保持简洁明了,尽量使用描述性的名称。
  1. 变量名:
  • 局部变量一般使用短小的名字,如i、j、k对于迭代器;v对于值等。
  • 全局变量则使用更描述性的名称。
  • 变量名应始终使用小写字母开头的驼峰命名法,除非导出变量。
  1. 常量名:
  • 常量名应使用大写字母开头的驼峰命名法。
  • 对于枚举类型的常量,可以使用大写字母和下划线的组合。
  1. 函数名和方法名:
  • 函数名和方法名使用大写字母开头的驼峰命名法,以示其可导出性。
  • 私有函数和方法名应使用小写字母开头。
  1. 类型名:
  • 类型名(包括结构体、接口、类型别名和类型定义)使用大写字母开头的驼峰命名法,表示可以被导出。
  • 私有类型名应使用小写字母开头。
  1. 包名:
  • 包名应当总是使用小写字母。
  • 当包名包含多个单词时,不使用下划线或驼峰命名法,而是将单词连在一起(如net/http)。
  1. 接口名:
  • 接口名通常以er后缀结尾,如Reader、Writer,但这不是硬性规则。
  1. 错误处理:
  • 在错误处理中,错误变量通常命名为err。
  1. 导出与非导出:
  • 在Go中,如果一个变量、函数、类型等的名称以大写字母开头,它就是可导出的(即其他包可以访问)。
  • 如果以小写字母开头,则为包私有,只能在同一个包内访问。

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

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

相关文章

<sa8650>sa8650 CDT-之-SA8650p实战验证

<sa8650>sa8650 CDT-之-SA8650p实战验证 1 前言2 生成CDT二进制文件2.1 第一步2.2 第二步2.3 第三步2.4 第四步3 修改QNX适配新的CDT3.1 修改lemans.dtsi文件3.2 新增dalconfig库3.3 修改dalconfig库名3.4 新增dalconfig库打包4 验证4.1 编译4.2 添加cdt二进制到刷机文件中

C语言多线程编程-线程属性和优先级

概念介绍 在C语言中进行多线程编程,通常会使用POSIX线程(也称为Pthreads)库,这是在Unix-like系统中实现多线程的标准方法。在Windows系统中,会使用Windows API来进行多线程编程。注意,C语言标准库本身并不…

大语言模型占显存的计算和优化

可以优化的地方: per_device_train_batch_size(相当于batch size,越小显存占的越小) gradient_accumulation_steps(per_device_train_batch_size*gradient_accumulation_steps计算梯度的数据数) gradien…

test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍

测试覆盖率 测试覆盖率(test coverage)是衡量软件测试完整性的一个重要指标。掌握测试覆盖率数据,有利于客观认识软件质量,正确了解测试状态,有效改进测试工作。 当然,要发挥这些作用,前提是我们掌握了真实的测试覆盖…

计算机毕业设计 基于Java的供应商管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

yolov1, yolo v2 和yolo v3系列分析

目标检测模型主要分为two-stage和one-stage, one-stage的代表主要是yolo系列和ssd。简单记录下学习yolo系列的笔记。 1 yolo V1 yolo v1是2015年的论文 you only look once:unified,real-time object detection 中提出,为one-st…

BUUCTF--hitcontraining_heapcreator1

老规矩上来看保护: 64位架构并且除了PIE全开。接着黑盒测试下场景: 菜单题不用想就是堆。接着我们我们看看IDA中的逻辑: 程序的主要逻辑是增删改查。我们看看创建堆的过程: 注释我已给出,步骤大概如下: 1.…

尚硅谷大数据技术-数据湖Hudi视频教程-笔记01【概述、编译安装】

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

基于单片机的智能衣柜设计

一、摘要 随着科技的不断发展,人们对于生活品质的要求越来越高。智能衣柜作为智能家居的一个重要组成部分,能够为用户提供便捷、个性化的衣物管理服务。本文主要研究了基于单片机的智能衣柜设计,通过对硬件系统和软件系统的设计与实现&#…

【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战

🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS …

CentOs搭建Kafka集群

Centos7搭建Kafka集群 一、集群规划二、环境准备三、安装kafka集群1、下载kafka安装包2、解压3、配置环境变量4、编辑配置文件①修改broker.id②配置kafka运行日志路径③配置Zookeeper集群地址 5、启动集群6、测试kafka①、创建topic②、查看当前服务器中的所有topic③、生产者…

如何使用CapSolver解决Web爬虫中遇到的CAPTCHA问题

Web爬取是一种强大的技术,用于从网站中提取数据,但经常会遇到一个常见障碍,即CAPTCHA。CAPTCHA是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,旨在防止自动机器人访问网站。然而&…

月薪15000在春晚分会场西安,够花吗?

千寻的结论: 如果有房无贷,另一半也有工作收入,父母身体健康且均有不错的退休金, 满足这些条件的话,在西安月入1.5W是相当不错。

人机交互主板定制_基于MT8735安卓核心板的自助查询机方案

人机交互主板是一种商显智能终端主板,广泛应用于广告机、工控一体机、教学一体机、智能自助终端、考勤机、智能零售终端、O2O智能设备、取号机、计算机视觉、医疗健康设备、机器人设备等领域。 人机交互主板采用联发科MTK8735芯片平台,四核Cortex-A53架构…

年度总结丨酷雷曼2023年度记忆

2023年 我们关心粮食和蔬菜 也关心“视界”和未来 我们执着于向新兴科技深处钻研 也探寻着让VR全景广泛落地 我们目睹着智慧生活的日新月异 也记录着平凡奋斗者们创造的非凡事业 2024年 属于VR的盛行之年 你又会将目光投向哪里? 这里有一份来自 酷雷曼的…

Video组件的使用

概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。以视频功能为例&a…

服务网格 Service Mesh

什么是服务网格? 服务网格是一个软件层,用于处理应用程序中服务之间的所有通信。该层由容器化微服务组成。随着应用程序的扩展和微服务数量的增加,监控服务的性能变得越来越困难。为了管理服务之间的连接,服务网格提供了监控、记…

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址: https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板:https…

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意:此方法对于多行合并后单元格行高调整不适用,需要手动调整,如大家有简便方法,欢迎评论。 一、调整表格为自动调整行高 1)点击此处全选表格 2)在第一行序号单元格的下端,鼠标成黑十字时&am…

leetcode2397. 被列覆盖的最多行数

目录 题目 思路 解题方法 题目 https://leetcode.cn/problems/maximum-rows-covered-by-columns/description/ 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。 …