Go 语言变量类型和声明详解

在Go中,有不同的变量类型,例如:

  • int 存储整数(整数),例如123或-123
  • float32 存储浮点数字,带小数,例如19.99或-19.99
  • string - 存储文本,例如“ Hello World”。字符串值用双引号括起来
  • bool 存储具有两个状态的值:true或false

声明(创建)变量

在Go中,有两种声明变量的方法:

使用var关键字:

使用var关键字,后跟变量名称和类型:

语法

var variablename type = value

注意:您始终必须指定typevalue(或两者)。

使用:=符号

使用:=符号,后跟变量值:

语法

variablename := value

注意:在这种情况下,变量的类型是从值中推断的(这意味着编译器根据值决定变量的类型)。

注意:无法使用:=声明变量,而不将值分配给它。

具有初始值的变量声明

如果从一开始就知道变量的值,则可以在一行中声明变量并为其赋值:

示例

package main
import ("fmt")func main() {var student1 string = "John" //type is stringvar student2 = "Jane" //type is inferredx := 2 //type is inferredfmt.Println(student1)fmt.Println(student2)fmt.Println(x)
}

注意:变量**student2x****的变量类型是从其值推断**的。

没有初始值的变量声明

在Go中,所有变量都已初始化。因此,如果声明变量而没有初始值,则其值将设置为其类型的默认值:

示例

package main
import ("fmt")func main() {var a stringvar b intvar c boolfmt.Println(a)fmt.Println(b)fmt.Println(c)
}

示例解释

在此示例中有3个变量:

  • a
  • b
  • c

这些变量已声明,但未分配初始值。

通过运行代码,我们可以看到它们已经具有其各自类型的默认值:

  • a""
  • b0
  • cfalse

声明后的值分配

可以在声明变量后将值分配给变量。这对于值最初未知的情况很有帮助。

示例

package main
import ("fmt")func main() {var student1 stringstudent1 = "John"fmt.Println(student1)
}

注意:无法使用:=声明变量,而不将值分配给它。

var和 := 之间的区别

var:=之间存在一些小差异:

var:=
可以在函数内部和外部使用仅可在函数内部使用
可以分别进行变量声明和值分配变量声明和值分配不能分别进行(必须在同一行中完成)

示例

此示例显示在函数外部使用var关键字声明变量:

package main
import ("fmt")var a int
var b int = 2
var c = 3func main() {a = 1fmt.Println(a)fmt.Println(b)fmt.Println(c)
}

示例

由于:=在函数外使用,因此运行程序会导致错误。

package main
import ("fmt")a := 1func main() {fmt.Println(a)
}

结果:

./prog.go:5:1: syntax error: non-declaration statement outside function body

Go多变量声明

在Go中,可以在同一行中声明多个变量。

示例

此示例显示如何在同一行中声明多个变量:

package main
import ("fmt")func main() {var a, b, c, d int = 1, 3, 5, 7fmt.Println(a)fmt.Println(b)fmt.Println(c)fmt.Println(d)
}

注意: 如果使用type关键字,则每行只能声明一个类型的变量。

如果未指定type关键字,则可以在同一行中声明不同类型的变量:

示例

package main
import ("fmt")func main() {var a, b = 6, "Hello"c, d := 7, "World!"fmt.Println(a)fmt.Println(b)fmt.Println(c)fmt.Println(d)
}

在块中声明Go变量

多个变量声明也可以组合到块中以增加可读性:

示例

package main
import ("fmt")func main() {var (a intb int = 1c string = "hello")fmt.Println(a)fmt.Println(b)fmt.Println(c)
}

Go变量命名规则

变量可以有简短的名称(如x和y)或更描述性的名称(age,price,carname等)。

Go变量命名规则:

  • 变量名称必须以字母或下划线字符(_)开头
  • 变量名称不能以数字开头
  • 变量名称只能包含字母数字字符和下划线(a-z,A-Z0-9_
  • 变量名称区分大小写(age,Age和AGE是三个不同的变量)
  • 变量名称的长度没有限制
  • 变量名称不能包含空格
  • 变量名称不能是任何Go关键字

多字变量名称

具有多个单词的变量名称可能难以阅读。

有几种技术可用于使它们更易于阅读:

驼峰命名法

每个单词,除了第一个单词以外,都以大写字母开头:

myVariableName = "John"

帕斯卡命名法

每个单词以大写字母开头:

MyVariableName = "John"

蛇形命名法

每个单词之间用下划线字符分隔:

my_variable_name = "John"

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

在这里插入图片描述

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

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

相关文章

微服务学习 | Ribbon负载均衡、Nacos注册中心、微服务技术对比

Ribbon负载均衡 负载均衡流程 负载均衡策略 通过定义IRule实现可以修改负载均衡规则,有两种方式: 1. 代码方式:在服务消费者order-service中的OrderApplication类中,定义一个新的IRule: 2.配置文件方式: 在order-service的application.yml…

【C++学习手札】模拟实现vector

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:くちなしの言葉—みゆな 0:37━━━━━━️💟──────── 5:28 🔄 ◀️ ⏸ ▶️ ☰…

Verilog基础:三段式状态机与输出寄存

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html 对于Verilog HDL而言,有限状态机(FSM)是一种重要而强大的模块,常见的有限状态机书写方式可以分为一段式,二段式和三段式,笔者强烈建议使用三…

进程信号(linux)

什么是信号 信号是一种用于进程之间通信或操作的一种手段,通常一个进程会在任意时刻接收到系统发送的信号,因此信号也可以看做是一种进程事件异步通知的手段。 一个进程可以对信号有三种操作: 默认操作:默认进行信号对应的操作…

【Python】【应用】Python应用之一行命令搭建HTTP、FTP服务器

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Python应用&…

python爬虫 之 JavaScript 简单基础

文章目录 在网页使用JavaScript 代码的方式常用的JavaScript 事件常用的JavaScript 对象 在网页使用JavaScript 代码的方式 在网页中使用 JavaScript 代码的方式主要有三种: 内联方式(Inline): 在 HTML 文件中直接嵌入 JavaScrip…

简单的 UDP 网络程序

文章目录: 简单的UDP网络程序服务端创建套接字服务端绑定启动服务器udp客户端本地测试INADDR_ANY 地址转换函数关于 inet_ntoa 简单的UDP网络程序 服务端创建套接字 我们将服务端封装为一个类,当定义一个服务器对象之后,需要立即进行初始化…

【uniapp/uview1.x】u-upload 在 v-for 中的使用时, before-upload 如何传参

引入: 是这样一种情况,在接口获取数据之后,是一个数组列表,循环展示后,需要在每条数据中都要有图片上传,互不干扰。 分析: uview 官网中有说明,before-upload 是不加括号的&#xff…

《QT从基础到进阶·三十三》QT插件开发QtPlugin

插件和dll区别: 插件 插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已; 调用插件中的方法只要dll即可&#x…

Ajax 之XMLHttpRequest讲解

一直以来都听别人说Ajax,今天终于接触到了。。。。。。。。。。 一.什么是Ajax? 答: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX 异步 JavaScript和XML&#x…

Linux(2):初探

Linux 是什么 Linux 就是一套操作系统。Linux 就是核心与系统呼叫接口那两层。 应用程序不算 Linux。 Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix 良好的传统来的,相当的稳定而功能强大。 在 Lin…

CPD:使用restAPI和cpd-cli命令创建DMC实例

环境 Red Hat Enterprise Linux release 8.6 (Ootpa)OCP 4.12.22IBM CP4D 4.8.0Data Management Console 3.1.12 (DMC for CPD 4.8.0) 注:使用了fyre VM。 创建DMC实例 准备 首先export环境变量: . ./stg_env.sh把 cpd-cli 放到PATH里。编辑 ~/.ba…

【网络奇遇记】那年我与计算机网络的初相识 —— 网络的体系结构

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 常见的三种计算机网络体系结构1.1 开放系统互连参考模型1.2 TCP/IP参考模型1.3 原理参考模型 二…

k8s pod常用运维命令

1. 概述 kubectl 命令是操作 Kubernetes 集群的最直接和最高效的途径,熟练掌握命令的使用能起到事半功倍的效果,整理命令有助于加深记忆,该文仅记录关于pod常用的操作运维命令。 2. 查看namespaces 查看k8s集群中目前存在的namespaces kub…

【设计一个缓存--针对各种类型的缓存】

设计一个缓存--针对各种类型的缓存 1. 设计顶层接口2. 设计抽象类 -- AbstractCacheManager3. 具体子类3.1 -- AlertRuleItemExpCacheManager3.2 -- AlertRuleItemSrcCacheManager 4. 类图关系 1. 设计顶层接口 // 定义为一个泛型接口,提供给抽象类使用 public interface Cach…

Centos7安装Redis

1.背景 2.步骤 1.安装gcc依赖 检查是否已安装gcc gcc -v 上图表示已安装,如果没有安装执行如下命令 [rootlocalhost local]# yum install -y gcc 2.下载并解压安装包 [rootlocalhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz [rootlocalhost lo…

《011.SpringBoot之餐厅点餐系统》

《011.SpringBoot之餐厅点餐系统》【界面简洁功能简单】 项目简介 需要源码及数据库的私信… [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatisPlus; 前台:Layuivue; …

【python】OpenCV—Image Pyramid(8)

文章目录 1 图像金字塔2 拉普拉斯金字塔 1 图像金字塔 高斯金字塔 在 OpenCV 中使用函数 cv2.pyrDown(),实现图像高斯金字塔操作中的向下采样,使用函数 cv2.pyrUp() 实现图像金字塔操作中的向上采样 import cv2img cv2.imread(C://Users/Administrat…

Mysql中的进阶增删查改操作(二)

联合查询和合并查询 一.联合查询1.内连接2.外链接2.1左外连接2.2右外连接 3.自连接4.子查询5.合并查询 一.联合查询 步骤 1.进行笛卡尔积 2.列出连接条件 3.根据需求再列出其他条件 4.针对列进行精简(可以使用聚合函数) 我们先搭建一个多表查询的框架 这样一个多表查询就搭建出…