Go语言入门指南:基础语法和常用特性(下)

news2024/12/23 17:53:16

上一节,我们了解Go语言特性以及第一个Go语言程序——Hello World,这一节就让我们更深入的了解一下Go语言的**基础语法**吧!

一、行分隔符

在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。

建议不要将多个语句写在同一行,如果同一行有多个语句也需要用分号 ; 区分。

二、关键字

程序一般由关键字、常量、变量、运算符、类型和函数组成。

 格式化输出:

 

三、命名

Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:Go 语言变量名由字母、数字、下划线 组成,其中首个字符不能为数字。大写字母和小写字母是不同的。

四、声明

1.Go语言主要有四种类型的声明语句:
  • var 变量
  • const 常量
  • type 类型
  • func 函数实体对象的声明
2.声明顺序

一个Go语言编写的程序对应一个或多个以 .go 为文件后缀名的源文件中。每个源文件以包的声明语句开始,说明该源文件是属于哪个包。包声明语句之后是 import 语句导入依赖的其它包。然后是包一级的 类型、变量、常量、函数 的声明语句,包一级的各种类型的声明语句的顺序无关紧要 (译注 : 函数内部的名字则必须先声明之后才能使用) 。

五、变量

声明变量的一般形式是使用 var 关键字:

(一)、var 可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。变量声明的一般语法如下:

var 变量名字 类型 = 表达式

其中 “类型”“= 表达式” 两个部分可以省略其中的一个。

  • 如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。
  • 如果初始化表达式被省略,那么将用零值初始化该变量。
    1. 数值类型变量对应的零值是0,
    2. 布尔类型变量对应的零值是false,
    3. 字符串类型对应的零值是空字符串,
    4. 接口或引用类型(包括slice、map、chan和函数)变量对应的零值是nil。
    5. 数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。

零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,因此在Go语言中不存在 未初始化的变量。

(二)、var 也可以一次声明或初始化多个变量:

var i, j, k int // int, int, int

var b, f, s = true, 2.3, "four" // bool, float64, string

初始化表达式可以是字面量或任意的表达式。

(三)、一组变量也可以通过调用一个函数,由函数返回的多个返回值初始化:

var f, err = os.Open(name) // os.Open returns a file and an error

 

在包级别声明的变量会在main入口函数执行前完成初始化,局部变量将在声明语句被执行到的时候完成初始化。

(四)、简短变量声明,使用 := 赋值操作符

在函数内部,有一种称为简短变量声明语句的形式可用于声明和初始化局部变量,变量的类型根据表达式来自动推导。

  • 简短变量初始化语法:

变量名字 := 表达式

(注意:它只能被用在函数体内,而不可以用于全局变量的声明与赋值)

因此我们可以将它们简写为 a := 50 或 b := false。

a 和 b 的类型(int 和 bool)将由编译器自动推断。

  • 和var形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:

i, j := 0, 1 //int int

但是这种同时声明多个变量的方式应该限制只在可以提高代码可读性的地方使用,比如 for语句循环的初始化语句部分。

  • 和普通var形式的变量声明语句一样,简短变量声明语句也可以用函数的返回值来声明和初始 化变量,像下面的os.Open函数调用将返回两个值:

f, err := os.Open(name)

if err != nil {

     return err

} // ...use f...

f.Close()

注意:如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明,例如:a := 20 就是不被允许的,编译器会提示错误 no new variables on left side of :=,但是 a = 20 是可以的,因为这是给相同的变量赋予一个新的值。

如果你在定义变量 a 之前使用它,则会得到编译错误 undefined: a。

如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误。

六、常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量的定义格式:

const 变量名 [type] = 表达式

//你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。

 

  • 常量表达式的值在编译期计算,而不是在运行期。
  • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
  • 和变量声明一样,可以批量声明多个常量。
  • 常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过。

七、条件语句

条件语句需要开发者通过指定一个或多个条件,如果条件为true则执行语句1,如果条件为false则执行语句2。

 八、循环语句

 

 

 

 

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

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

相关文章

MySQL基础篇(二)

DML 定义:Data Manipulation Language、数据操作语言(增删改) 添加数据(INSERT)修改数据(UPDATE)删除数据(DELETE) 添加数据(INSERT) 给指定的…

day0818

1. #include <myhead.h> int file_len(const char*strfile, const char*dstfile); void file_copy(const char* strfile, const char* dstfile, int start, int size); int main(int argc, const char *argv[]) {//判断是否传入两个文件if(argc!3){printf("input fi…

最新消息:谷歌将在Chromebook上运用UWB技术,无线通信更上一层

超宽带&#xff08;UWB&#xff09;技术是一种创新的短距离无线通信技术&#xff0c;具有高速数据传输和精确定位物体位置的优势。尽管该技术已经存在一段时间&#xff0c;但最近开始广泛应用于各种设备中。据最新报道&#xff0c;Pixel Watch 2可能会搭载UWB模块&#xff0c;这…

VSCode之C++ SQLite3 SmartDB实现

背景 承接上篇VSCode配置之C & SQLite3极简配置方案&#xff0c;参考《深入应用C11: 代码优化与工程级应用》&#xff0c;基于VSCodeCmake无痛实现SmartDB。 GitHub路径&#xff1a; smartDB_tutorial 结果展示 主要变化(与SmartDB1.3相比&#xff09; 1&#xff09;使用…

【【萌新的STM32学习-11】】

萌新的STM32学习-11 终于进入了正点原子的入门篇进行一些简单的设计 GPIO General Purpose Input Output 通用输入输出端口 简称GPIO 作用 &#xff1a;负责采集外部器件的信息或者控制外部器件工作&#xff0c;即输入输出 GPIO 的特点 1&#xff0c;不同型号&#xff0c;IO数…

HTML浪漫动态表白代码+音乐(附源码)(二)

一. 前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家加几款实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;求爱表白等场景&#xff0c;可直接使用。 来吧&#xff0c;展示&am…

第 7 章 排序算法(3)(选择排序)

7.6选择排序 7.6.1基本介绍 选择式排序也属于内部排序法&#xff0c;是从欲排序的数据中&#xff0c;按指定的规则选出某一元素&#xff0c;再依规定交换位置后达到排序的目的。 7.6.2选择排序思想: 选择排序&#xff08;select sorting&#xff09;也是一种简单的排序方法…

13.PV和PVC

文章目录 PV和PVC概念定义PV定义PVC创建静态PV和PVC创建动态PV和PVCNFS配置创建 Service Account和角色创建存储卷插件创建 StorageClass创建PVC创建pod 总结 PV和PVC 概念 PV 全称叫做 Persistent Volume&#xff0c;持久化存储卷。它是用来描述或者说用来定义一个存储卷的&…

1593页54万字电力行业数字化转型智慧电力云平台整体解决方案WORD

导读&#xff1a;原文《1593页54万字电力行业数字化转型智慧电力一体化监管云平台整体解决方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 南方电网一体化…

基于Pytorch实现的声纹识别系统

前言 本项目使用了EcapaTdnn、ResNetSE、ERes2Net、CAM等多种先进的声纹识别模型&#xff0c;不排除以后会支持更多模型&#xff0c;同时本项目也支持了MelSpectrogram、Spectrogram、MFCC、Fbank等多种数据预处理方法&#xff0c;使用了ArcFace Loss&#xff0c;ArcFace loss…

TCP协议报文结构

TCP是什么 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、全双工的传输协议。它使用头部&#xff08;Header&#xff09;和数据&#xff08;Data&#xff09;来组织数据包&#xff0c;确保数据的可靠传输和按序传递。 TCP协议报文结构 下面详细阐述TCP…

SSH远程直连--------------Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 在某些特殊需求下,我们想ssh直接远程连接docker 容器,下面我们介绍结合cpolar工具实现ssh远程直接连接docker容器…

excel 动态表头与合并列

零、希望Springboot-java导出excel文件&#xff0c;包括动态表头与下边合并的列 使用 org.apache.poi 与自己封装工具类实现相关功能。代码如下 一、代码 1、依赖 implementation(group: org.apache.poi,name: poi-ooxml,version: 4.1.0)implementation(group: org.apache.po…

【Docker】存储卷Volume

Docker Volume概念 什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的…

1139. 最大的以 1 为边界的正方形;2087. 网格图中机器人回家的最小代价;1145. 二叉树着色游戏

1139. 最大的以 1 为边界的正方形 核心思想&#xff1a;枚举正方向的右下角坐标&#xff08;i&#xff0c;j&#xff09;&#xff0c;然后你只需要判断四条边的连续一的最小个数即可&#xff0c;这里是边求连续一的个数同时求解结果。 087. 网格图中机器人回家的最小代价 核心…

PHP自己的框架实现操作成功失败跳转(完善篇四)

1、实现效果&#xff0c;操作成功后失败成功自动跳转 2、创建操作成功失败跳转方法CrlBase.php /**成功后跳转*跳转地址$url* 跳转显示信息$msg* 等待时间$wait* 是否自动跳转$jump*/protected function ok($urlNULL,$msg操作成功,$wait3,$jump1){$code1;include KJ_CORE./tp…

FPGA原理与结构——可配置逻辑块CLB(Configurable Logic Block)

一、什么是CLB 1、CLB简介 可配置逻辑块CLB&#xff08;Configurable Logic Block&#xff09;是xilinx系类FPGA的基本逻辑单元&#xff08;在各系列中CLB可能有所不同&#xff0c;以下我们主要讨论Xilinx 7系类&#xff09;&#xff0c;是实现时序逻辑电路和组合逻辑电…

基于Pytorch构建DenseNet网络对cifar-10进行分类

DenseNet是指Densely connected convolutional networks&#xff08;密集卷积网络&#xff09;。它的优点主要包括有效缓解梯度消失、特征传递更加有效、计算量更小、参数量更小、性能比ResNet更好。它的缺点主要是较大的内存占用。 DenseNet网络与Resnet、GoogleNet类似&#…

如何下载英伟达NVIDIA旧版本驱动,旧版本驱动官方网址

https://www.nvidia.cn/Download/Find.aspx?langcn 也可以直接搜索英伟达官网&#xff0c;点击驱动程序&#xff0c;然后点击试用版驱动程序&#xff0c;里面不但有试用版的驱动&#xff0c;还有之前发布的所有驱动

redis乐观锁+启用事务解决超卖

乐观锁用于监视库存&#xff08;watch&#xff09;&#xff0c;然后接下来就启用事务。 启用事务&#xff0c;将减库存、下单这两个步骤&#xff0c;放到一个事务当中即可解决秒杀问题、防止超卖。 但是&#xff01;&#xff01;&#xff01;乐观锁&#xff0c;会带来" …