go语言的变量定义示例详解

目录
  • 前言
  • 定义单个变量
  • 定义多个变量
    • 定义相同类型的多个变量
  • 变量的初始化
  • 变量类型的省略
  • var关键字的省略(简短声明)
    • 全局变量与局部变量
  • 特别的变量名
  • 未使用变量的限制
  • 常量

前言

特别说明: 本文只适合新手学习

这篇文章带我们入门go语言的定义变量的方式,其实和javascript很相似,所以特意总结在此。

在go语言中,也有变量和常量两种,首先我们来看变量的定义,定义变量我们分为定义单个变量和多个变量。

本文知识点总结如下图所示:

定义单个变量

在定义单个变量中,我们通过var关键字来定义一个变量,其后跟变量名和变量类型,其中变量类型可以省略,语法结构如下:

var <变量名> <变量类型>

例如:

var name string

以上代码表示定义一个变量名为name,变量类型为字符串的变量,注意go语言定义变量的类型始终是在最后。

可以看到,和js定义变量区别不大,只不过是多了一个类型声明,其中这个类型声明还可以省略。

定义多个变量

在go语言中,我们通过,操作符来定义多个变量,这里定义多个变量也分为两种情况,一种是多个变量都是同一类型,另外一种则是不同类型的多个变量,我们先来看第一种。

定义相同类型的多个变量

和定义单个变量一样,也是使用var关键字来定义,并且通过,来分隔,语法结构如下:

var <变量名1>,<变量名2>,<变量名3>,... <变量类型>

如:

var name1,name2,name3 string

以上定义了name1,name2,name3 3个变量,变量的类型都是string。

可以看到以上是定义相同类型的多个变量,那么我们应该如何定义不同类型的多个变量呢?

很简单,用()包裹起来,然后也是使用,分隔,在每个变量名后面紧跟变量类型即可,语法如下:

var (<变量名1> <变量1类型>,<变量名2> <变量2类型>...)

例如以下代码:

var (name string,age int)

是不是很简单?

变量的初始化

在go语言中,定义了变量,同样也会有初始化的操作,也就是说给变量初始化值,也是通过=操作符后跟值即可。语法结构如下:

var <变量名> <变量类型>? = <变量值>

例如:

var name string = "eveningwater"

变量类型的省略

其实我们在初始化变量的时候可以省略变量类型,然后go编译器会在编译的时候帮我们自动推导变量类型,这简直就是在写javascript啊,这也是我在以上语法变量类型那一块中标注?的原因,就表示可以写可以不写。例如以上示例代码就可以写成:

var name = "eveningwater"

如此看来,我们定义多个变量同样也可以省略变量类型,如:

var (name,age) = "eveningwater",26

又或者是:

var name1,name2  = "eveningwater","xxx"

var关键字的省略(简短声明)

go语言的定义变量名的关键字var也可以省略,这也是我没有想到的,如下所示:

name1,name2 := "eveningwater","xxx"

感觉挺神奇的,是吧!go把这种省略了var和type的声明叫做简短申明。这样一来我们就可以在定义变量的时候用这个":="来定义变量了,不,你想多了,使用这种方式来定义变量是有限制的,那就是这种方式只能够作用在函数内部,如果我们要定义全局变量的话,还是要老老实实的写var关键字。

全局变量与局部变量

通过以上的说明,我们知道了定义全局变量和定义局部变量的方式,如下:

var a string = "hello" //全局变量
func test() {
    b := " world" //局部变量
    c := a + b
    fmt.Printf("%s \n", c)
}

特别的变量名

go语言有个很特殊的变量名,那就是下划线"_",为什么说它特殊呢,因为定义它的值都会被丢弃,没错,就是丢弃,例如:

_,num = 35,34

其中_变量值为35将会被丢弃,最后就只剩下值为34的num变量了,感觉这种设计也是挺有意思的。

未使用变量的限制

go语言在编译阶段会对声明但未使用变量报错,比如以下代码就会报错: 声明了i变量但并未使用。

package main
func main(){
    //编译阶段报错
    var i int
}

常量

常量其实也就是在程序编译阶段定下来的值吗,无法被修改,在go语言中常量也可以被定义成数值,布尔值或者是字符串等类型。它的语法结构如下:

const variableName = value;

例如:

const num int = 10;

其中常量的类型如果需要也可以加上。

以上就是本文内容了,感谢大家观看,看完本文,想来应该要不了几分钟,几分钟就掌握了go语言定义变量的概念和方式,想来还是值得的,非常适合新手学习

以上就是go语言的变量定义示例详解的详细内容,更多关于go语言变量定义的资料请关注我们其它相关文章!

(0)

相关推荐

  • 优雅使用GoFrame共享变量Context示例详解

    目录 前言摘要 Context是什么? 为什么需要Context? Context是如何实现共享变量的? 如何使用? 一.结构定义 介绍 二.逻辑封装 三.上下文变量注入 四.上下文变量使用 方法定义 Context对象获取 自定义Key-Value 五.注意问题 总结 前言摘要 昨天和同事merge代码又遇到了很多冲突,发现之前有些方法写的参数不规范,没有传入Context,不方便进行链路追踪.他在review项目代码,基本把项目中的方法都加了Context参数. 今天就为大家介绍一下Cont

  • Go语言基础变量的声明及初始化示例详解

    目录 一.概述 二.声明变量 三.编译器推导类型的格式[一定要赋值] 四.短变量声明并初始化 五.匿名变量--没有名字的变量 六.注意 七.案例 一.概述 变量的功能是存储用户的数据 二.声明变量 Go语言的每一个变量都拥有自己的类型,必须经过声明才能开始用 变量的声明格式: var <变量名称> [变量类型] var a int //声明一个整型类型的变量,可以保存整数数值 var b string //声明一个字符串类型的变量 var c float32 //声明一个32位浮点切片类型的变

  • Go语言编译原理之变量捕获

    目录 前言 变量捕获概述 变量捕获底层实现 总结 前言 在前边的几篇文章中已经基本分享完了编译器前端的一些工作,后边的几篇主要是关于编译器对抽象语法树进行分析和重构,然后完成一系列的优化,其中包括以下五个部分: 变量捕获 函数内联 逃逸分析 闭包重写 遍历函数 后边的五篇文章主要就是上边这五个主题,本文分享的是变量捕获,变量捕获主要是针对闭包场景的,因为闭包函数中可能引用闭包外的变量,因此变量捕获需要明确在闭包中通过值引用或地址引用的方式来捕获变量 变量捕获概述 下边通过一个示例来看一下什么是变

  • Golang检查变量类型的四种方式

    目录 %T 格式化标识 使用reflect包函数 reflect.TypeOf() reflect.ValueOf().Kind() 使用类型断言 自定义方法检查类型 Go提供几种方法检查变量的类型,在字符串格式化标识%T, 反射方式:reflect.TypeOf, reflect.ValueOf.Kind,另外还有使用类型断言,switch case方式.下面通过实例分别介绍这四类方法. %T 格式化标识 使用%T字符串格式化标识是最简单的检查类型方式.%T是fmt包,可以使用fmt.Prin

  • Golang语言的多种变量声明方式与使用场景详解

    目录 01介绍 02变量声明方式 标准声明变量 不显式赋初始值声明变量 省略类型声明变量 短变量声明 显式类型转换 变量列表声明 变量声明块 03使用场景 包级变量 全局变量 局部变量 04注意事项: 05总结 01介绍 在程序设计中,编译器必须将代表数据的变量名称替换成该数据所在的内存地址.变量的名称.类型及内存地址通常会维持固定,但该内存地址所存储的数据在程序执行期间则可能会改变. Golang 语言编译器需要先明确变量的内存边界,才可以使用变量.通过声明变量使用的类型,编译器可以明确变量的

  • Go中变量命名规则与实例

    目录 前言 命名习惯很重要 良好命名喜欢的特质 经验法则 大小写混用的变量名 变量名避免冗余 函数参数的命名 返回值的命名 方法 Receiver 的命名 导出 package 级别变量命名 接口类型 error 命名 Packages 名 结论 总结 前言 来自 Google 的 Andrew Gerrand 曾经关于 Go 中的参数命名规范进行了分享,slides 为 https://talks.golang.org/2014/names.slide 命名习惯很重要 良好的可读性是高质量代码

  • GoFrame通用类型变量gvar与interface基本使用对比

    目录 前言摘要 通用变量 gvar 使用场景 看源码学编程 如何设置并发安全开关呢? 基本使用 打印结果 序列化示例 打印结果 总结 前言摘要 这篇文章将介绍 GoFrame 通用类型变量gvar的概念,对比 interface{}的特点:以及如何设置gvar的并发安全开关等基础使用:介绍序列化示例代码. 通用变量 gvar gvar 通用动态变量,支持各种内置的数据类型转换,可以作为interface{}类型的替代数据类型,并且该类型支持并发安全开关. 使用场景 所有需要使用interface

  • go语言的变量定义示例详解

    目录 前言 定义单个变量 定义多个变量 定义相同类型的多个变量 变量的初始化 变量类型的省略 var关键字的省略(简短声明) 全局变量与局部变量 特别的变量名 未使用变量的限制 常量 前言 特别说明: 本文只适合新手学习 这篇文章带我们入门go语言的定义变量的方式,其实和javascript很相似,所以特意总结在此. 在go语言中,也有变量和常量两种,首先我们来看变量的定义,定义变量我们分为定义单个变量和多个变量. 本文知识点总结如下图所示: 定义单个变量 在定义单个变量中,我们通过var关键字

  • C语言实现队列的示例详解

    目录 前言 一. 什么是队列 二. 使用什么来实现栈 三. 队列的实现 3.1头文件 3.2 函数的实现 四.完整代码 前言 前一段时间,我们试着用C语言实现了数据结构中的顺序表,单链表,双向循环链表,栈.今天我们再用C语言来实现另一种特殊的线性结构:队列 一. 什么是队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(head)进行删除操作,而在表的后端(tail)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 这个队列就可

  • Go语言基础模板设计模式示例详解

    目录 概述 模板模式生活案例 策略模式涉及到两个角色 UML 总结 示例 概述 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式.让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤 确定了步骤的执行顺序,单某些步骤因环境或人等因素具体实现是未知的 模板模式生活案例 请客吃饭[点菜->吃东西->结账],每个人点菜不一样,吃东西不一样,结账也不一样从某地到某地[起点->出行方式->终点]起点和终点不一一样,但是每个人出行方式是不一样的 Go没有封装.

  • C语言进阶栈帧示例详解教程

    目录 正片开始 栈有什么用? 寄存器 main函数创建 局部变量创建 函数部分 形参与实参 正片开始 今天来讲讲我对栈帧创建与销毁的拙见.理解什么是栈帧首先知道什么是栈: 在数据结构中, 栈是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据. 栈有什么用? 在计算机系统中,栈也可以称之为栈内存是一个具有动态内存区域,存储函数内部(包括main函数)的局部变量和方法调用和函数参数值,

  • C语言实现栈的示例详解

    目录 前言 一. 什么是栈 二. 使用什么来实现栈 三. 栈的实现 3.1 头文件 3.2 函数实现 3.3 完整代码 四. 栈的用处 前言 前一段时间,我们试着用C语言实现了数据结构中的顺序表,单链表,双向循环链表.今天我们再用C语言来实现另一种特殊的线性结构:栈 一. 什么是栈 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成

  • C语言实现阶乘的示例详解

    目录 前言 1.阶乘实现 1.1理论步骤 1.2实践结果 2.连续乘层相加实现 2.1理论步骤 2.2实践结果 前言 在现实中,我们做数学题总会遇到阶乘问题,这在计算机中也不例外. 那我们应该怎么实现呢? 我记得很多老师在电脑上书写阶乘都是用!这个符号表示. 比如5的阶乘,写为5!. 这在C语言中是行不通的,下面我讲解C语言中阶乘的实现. 1.阶乘实现 1.1理论步骤 我们可以利用while.do……while.以及for等循环实现,实现功能如下: 我们先设置好3个变量,i.n(想要的阶层数).

  • go语言编程实现递归函数示例详解

    目录 前言 函数中的 return 递归的问题 总结 前言 本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下. 在开始之前还是简单介绍下本次更新的 GScript v0.0.9 所包含的内容: 支持可变参数 优化 append 函数语义 优化编译错误信息 最后一个就是支持递归调用 先看第一个可变参数: //formats according to a format specifier and writ

  • Verilog语言的循环语句示例详解

    目录 关键词:while, for, repeat, forever while 循环 for 循环 repeat 循环 forever 循环 关键词:while, for, repeat, forever Verilog 循环语句有 4 种类型,分别是 while,for,repeat,和 forever 循环.循环语句只能在 always 或 initial 块中使用,但可以包含延迟表达式. while 循环 while 循环语法格式如下: while (condition) begin -

  • C语言实现单元测试的示例详解

    目录 前沿 使用前提 测试框架如下 测试方法编写文件 验证 前沿 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等.总的来说,单元就是人为规定的最小的被测功能模块.单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试. 在网上找了找C语言都没有类似j

  • Go语言数据结构之插入排序示例详解

    目录 插入排序 动画演示 Go 代码实现 总结 插入排序 插入排序,英文名(insertion sort)是一种简单且有效的比较排序算法. 思想: 在每次迭代过程中算法随机地从输入序列中移除一个元素,并将改元素插入待排序序列的正确位置.重复该过程,直到所有输入元素都被选择一次,排序结束. 插入排序有点像小时候我们抓扑克牌的方式,如果抓起一张牌,我们放在手里:抓起第二张的时候,会跟手里的第一张牌进行比较,比手里的第一张牌小放在左边,否则,放在右边. 因此,对所有的牌重复这样的操作,所以每一次都是插

随机推荐