变量

变量是几乎所有编程语言中最基本的组成元素,从根本上说,变量相当于是一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。go语言中的变量使用方式与C语言接近,但具备更大的灵活性。

变量的声明

  go语言引入了关键字ver,而类型信息放在变量名之后。示例如下:

var v1 int

var v2 string

var v3 [10]int    //数组

var v4 []int        //数组切片

var v5 struct  {
f int
} var v6 *int // 指针 var v7 map[strint]int //map,key为string类型,value为int类型 var v8 func(a int) int

  

变量声明语句不需要使用分号作为结束语,与C语言相比,go语言摒弃了语句必须以分号作为语句结束标记的习惯。

var关键字的另一种用法是可以将若干个需要声明的变量放置在一起,免得程序员需要重复写var关键字,如下图:

var (
v1 int
v2 string
)

变量初始化

  对于声明变量时需要进行初始化的场景,var关键字可以保留,但不再是必要的元素,如下所示:

//正确的使用方式1
var v1 int =10 //正确的使用方式2,编译器可以自动推导出v2的类型
var v2 = 10 //正确的使用方式3,编译器可以自动推导出v3的类型
v3 := 10

  以上三种用法的效果是一样的,与第一种用法相比,第三种用法需要输入的字符数大大减少,这里go语言也引入了另一个c和c++中没有的符号(冒号和等号的组合:=),用于明确表达同时进行变量声明和初始化的工作。

指定类型已不再是必须得,go编译器可以从初始化表达式的右值推导出该变量应该声明为那种类型,这让go语言看起来有点像 动态类型语言,尽管go语言实际上是不折不扣的强类型语言(静态类型语言)

当然,出现  :=左侧的变量不应该是已经被声明过的,否则会导致编译错误,比如下面这个:

var i int
i := 2 会导致类似如下的编译错误 no new variables on left side of :=

变量赋值

  在go语法中,变量初始化和变量赋值是两个不同的概念,下面为声明一个变量之后的赋值过程:

var  v10  int
v10 = 123

  go语言的变量赋值与多数语言一直,但go语言中 提供了c/c++程序员期盼多年的多重赋值功能,比如下面这个交换  i  和  j   变量的语句:

i , j = j , i
在不支持多重赋值的语言中,交互两个变量的内容需要 引入一个中间变量。 t = i; i = j; j = t;

  多重赋值的特性在go语言库的实现中也被使用得相当充分,在介绍函数的多重返回值时,将对其进行更加深入的介绍 ,总而言之 ,多重赋值功能让go语言与C/C++语言相比非常明显地减少代码行数 。

匿名变量

  我们在使用传统的强类型语言编程时,经常会出现这种情况,即在调用函数 时为了获取一个值,却应为该函数返回多个值而不得不定义一堆没用的变量,在go中这种情况可以通过结合使用多重返回和匿名变量来避免这种丑陋的写法,让代码看起来更加优雅。

假设:GetNmae()函数的定义如下,它返回三个值,分别为 firstName、lastName和nickName:

func GetName() (firstName, lastName, nickName string) {
return "may", "Hello", "World"
}

  若只想获得nickName,则函数调用语句可以用如下方式编写:

_, _, nickName := GetName()

  这种用法可以让代码非常清晰,基本上屏蔽掉了可能混淆大家实现的内容,从而大幅度降低沟通的复杂度和代码为何的难度。

常量

  在go语言中常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数型)、布尔类型、字符串类型等。

字面常量

所谓字面常亮(literal),是指程序中硬编码的常量,如:

-12
3.14159265358979323856 //浮点类型的常量
3.2+12i //复数类型常量
true //布尔类型常量
"foo" //字符串常量

  只要这个常量在响应类型的值域范围内,就可以作为该类型的常量。

 常量的定义

通过const关键字,你可以给字面常亮指定一个很友好的名字:

const Pi float64 = 3.14159265358979323846

const zero = 0.0       //无类型浮点常量

const (
size int64 = 1024
eof = -1 //无类型整数常量
) const u, v float32 = 0, 3 // u = 0.0, v = 3.0, 常量的多场赋值 const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo" ,无类型整型和字符串常量

  go的常量定义可以限定类型,但不是必须的,如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。

预定义常量

  go的语言预定义了这些常量: true ,  false和iota。

iota比较特殊,可以认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其 所代表的数字会自动增1。

从以下列子当中可以基本理解iota的用法:

const(                     // iota被重设为0
c0 = iota // c0 == 0
c1 = iota // c1 == 0
c2 = iota // c2 == 0
) const (
a = 1 << iota // a ==1 (iota在每个const开头被重设为0)
b = 1 << iota // b == 2
c = 1 << iota // c == 4
) const (
u = iota * 42 // u == 0 iota在每个const开头被重设为0
v float64 = iota * 42 // b == 2
c = 1 << iota // c == 4 ) const(
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
w = iota * 42 // w == 84 ) const x = iota // x == 0 itao又被重设为0 const y = iota // y == 0 同上

  如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式,因此,上面的前两个const语句可简写为:

const (
c0 = iota // iota被重设为0
c1 // c1 == 1
c2 // c2 == 2
) const (
a = 1 << iota // a == 1
b // b == 2
c // c == 4 )

  小结: 本章只是学习go的基本的变量,变量的定义,常量等。

定义变量关键字:    var

定义常量关键字 :   const

一起来学Go --- (go的变量)的更多相关文章

  1. Python入门必学:数据类型和变量的用法

    什么是数据类型?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据, ...

  2. Linux就该这么学——重要的环境变量

    Linux命令执行过程 1.判断用户是否以绝对路径或相对路径的方式输入命令(如 /bin/ls) ,如果是的话则直接执行 2.Linux系统检查用户输入的命令是否为”别名命令”. 即用一个自定义的命令 ...

  3. 从零开始学C++(1 变量和基本类型)

    接下来的几篇文章介绍C++的基础知识点. C++是一种静态数据类型语言,它的类型检查发生在编译时.因此,编译器必须知道程序中每一个变量对应的数据类型. 数据类型是程序的基础:它告诉我们数据的意义以及我 ...

  4. 重学ES系列之变量的作用范围

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Problem T: 零起点学算法15——交换变量

    #include<stdio.h> int main() { int a,b,c; scanf("%d %d",&a,&b); c=a; a=b; b= ...

  6. 简单学C——第四天

    数组 在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈. 前面我们大致学了 1.定义变量,2.数据的输入与输出,3. ...

  7. Visual Studio环境变量使用实例:使用环境变量来组织project

    前言 在前一篇文章Visual Studio中的环境变量(以Visual Studio 2013为例)中介绍了VS中的环境变量,本文将以实际样例说明怎样合理使用这些环境变量来组织VC++project ...

  8. 5-1 变量与常量 & 6-1课程总结

    变量与常量 常量就是变量定义的的前面加上final final关键字定义常量 新建类FinalDemo 更新常量n的值会报错.常量不可以被修改 常量有个命名规则 一般以大写字母去表示 final in ...

  9. 重学js之JavaScript 面向对象的程序设计(创建对象)

    注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...

随机推荐

  1. crm维护踩坑记(一)

    目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...

  2. 还在为画“类Word文档报表”而发愁吗?

    欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~​ Word 是非常强大的文档编辑工具,一些行业制式文档都是使用Word来创建的,像教育行业的申请表,履历表,审批表等,像石油业的 ...

  3. 使用WordPress快速建站

    安装前的准备1.下载最新版的 WordPress (这里演示为WordPress 3.5 官方中文版),解压后,将WordPress文件夹里面的所有文件,上传到你的主机空间域名所绑定的根目录.2.新建 ...

  4. Opencv-2017-7-18

    橘子薄皮只吃瓤,可以称之为过滤,意思是只要我们需要的东西,去除不需要的. 图像灰度级的分布及变化. 空间域(分布)和频域(变化). 低频(变化小),高频,水平/垂直,(高/低通滤波器). 低频-类似模 ...

  5. redis 订阅与发布

    PUBLISH,SUBSCRIBE,等命令实现订阅与发布 订阅/发布到频道 订阅/发布到模式   频道的订阅与信息发送   订阅subscribe,可以让客户端订阅任意数量的频道, 每当有新信息发送到 ...

  6. maven快速上手

    1.maven安装 首先下载apache-maven-3.3.3-bin.zip(版本可以自己根据自己想要的下载). 解压后如下:   接下来配置系统环境变量: 到此,maven安装好了,接下来输入 ...

  7. centos 7 下面安装oracle 11g r2 过程分享

    本人对LINUX等很多还不熟悉,如果有不对的地方还请各位指正.谢谢. 打算学习下ORACLE,RMAN备份与还原功能,所以安装了虚拟机,用的是centos7 X86_64-1611版本,oracle用 ...

  8. Redis-消息发布与订阅

    redis的消息发布与订阅适合做在线聊天, 消息推送 使用方法: 发布端: publish +频道名称 + 发布内容 订阅端: subscribe + 频道名称 发布端例子: 127.0.0.1:63 ...

  9. 防止DDoS攻击的方式

    针对企业的DDoS攻击持续增长,根据Akamai的调查报告,2015年DDoS攻击增长了史无前例的180% !面对 DDoS 攻击性挑战,我们应该建立有效的防御体系来抵御攻击.   1.网站IP减少公 ...

  10. 怎么把系统装进u盘(ultraiso)

    ​首先要下载一个叫ultraiso的软件.可以在百度中搜索此软件下载.下载后安装,安装后打开软件,如图所示.        ​点击左上角的文件选项,在弹出的菜单中,点击打开选项,打开一个你要装进U盘的 ...