三、关键字及内置预声明常量、类型、函数

1、关键字

Go有25个关键字,只能用在语法允许的地方,不能作为名称使用,它们是:

break          default         func         interface         select

case           defer            go            map                struct

chan           else             goto         package          switch

const          fallthrough   if              range               type

continue     for               import      return               var

2、内置的预声明的常量、类型和函数

常量:true    false    iota    nil

类型:int       int8      int16     int32     int64

uint     uint8    uint16   uint32   uint64    uintptr

float32   float64    complex128      complex64

bool     byte     rune      string    error

函数: make    len    cap    new    append    copy    close    delete

complex     real    imag

panic      recover

四、变量及常量的声明

1、变量

标识符 (包括变量、常量、函数、包名)必须以字符开头(所有Unicode UTF-8中的字符 或 下划线“_”),不能使用数字开头。

变量的三个作用域:在函数的形式参数和函数内声明的变量(常量、函数也是)是局部变量,在函数外声明的是全局变量,首字母大写的变量在包外可见,因此形成的3个作用域块由大到小是: 包>文件>函数 ,对应 包内全局变量、文件内私有全局变量、局变量。

同一作用域内不予许重复声明同名变量,局部变量可以与全局变量同名,但包名跟作用域无关,包名只是为了标识文件所属的包。

声明全局变量必须使用 var 关键字。

声明单个局部变量也可以使用 var 关键字,但不能使用 var 同时声明多个局部变量,一般使用  :=  快速声明赋值局变量, := 只能用于局部变量。

go 是强类型语言,声明变量时需要指明变量类型, 语法:

 var 变量名 类型

下面是变量的声明和赋值方法:

var i int //声明一个 int 变量,   全局变量的声明不可以省略 var 关键字。
i = 1 //赋值 var m int = 2 //声明变量并赋值
var n = 3 //省略 变量类型声明,编译器自动推导出变量类型 k:=4 //使用 := 声明并赋值一个变量,编译器自动推导出变量类型, := 不能用于单纯赋值,不能用于声明全局变量 var x,y int //声明多个int 比量
var x1,x2,x3,x4 int = 1,2,3,4 //声明多个变量并赋值 //这样也是声明多个变量
var (
a1 int
a2 int
)

var (
   b1 int = 1
   b2 int =2
  b3 := 3
) var v2, v3, v4 int
v2, v3, v4 = 1, 2, 3 //多重赋值 i := 10
j := 20
i, j = j, i //交换变量的值

  

关于 := 对局部变量的重新声明和重新赋值:该操作符隐含了局部变量的声明,但是,都用于批量声明和赋值时,如果对同一个局部变量做了操作,要看情况

func f(){

  i:=1
i:=2 //err,不能重新声明变量 i a1,a2 :=1,2
a1,a2 := 3,4 //err,不能重新声明变量 a1,a2 a1, b1,i := 3,4,5 //ok ,声明了一个新变量 b1, 同时对变量 a1 和 i 重新赋值 }

  

匿名变量:下划线在 go 语言中被称为匿名变量,是一个特殊的变量名,任何赋予它的值都会被丢弃,go的函数介意返回多个值,如果不需要其中某个值就可以把它赋给下划线。

2、常量

常量:go 语言中常量是指编译期间就已知且不可改变的值,包括指程序中硬编码的字面常量,和使用 const 声明的常量。

硬编码的字面常量包括数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型;

常量的声明语法和变量生命与法一样,只要把 var 换成 const 即可。

如果试图对一个常量进行重新赋值将导致编译错误。

常量迭代生成器 iota :如果过需要按一定规则声明一批常量,可以使用 iota 生成器,iota 生成器在遇到 const 关键字时被初始化为0,声明常量的代码每换一行增加1,如果过同一行声明多个常量,则这些常量的值相同。

const (
x = iota // x == 0
y //y =1 ,只要第一个常量使用了 iota,后面的会隐式使用
z //z=2
) const m = iota //0 const (
a1 = iota //0
a2 = 2
a3,a4 = iota,iota //同一行,都是1
a5 = iota //2
) const (
_ = iota
KB float64 = 1 << (10*iota) //KB为1左移10位
MB //MB左移20位 ...
GB
TB
)

  

Golang Go Go Go part2:变量及常量声明的更多相关文章

  1. 《从零开始学Swift》学习笔记(Day 58)—— Swift编码规范之变量或常量声明规范

    原创文章,欢迎转载.转载请注明:关东升的博客 声明是在声明变量.常量.属性.方法或函数和自定义类型时候需要遵守的规范. 首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释.示例 ...

  2. Java变量和常量声明

    一.变量     1.变量的定义           变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内 ...

  3. ES6 变量、常量声明总结

    较之前ES5,新颁布在声明上有改变 一.var  对比  let 1.作用域不同 let只在命令所在的代码块 {} 里有效 ES5只有全局作用域和函数作用域,没有块级作用域,带来很多不合理的场景,比如 ...

  4. Apex语言(二)变量与常量

    1.变量 凡是交给计算运算(处理)的数据就是变量,用来保存参加运算的数据和计算结果. 变量由变量名来标识. 变量名由字母数字和下划线组成,不能以数字开头. [正确]number,number1,num ...

  5. golang语法学习(一):变量,常量以及数据类型

    学习一门新的语言肯定是要从他的主要的语法開始,语法构成了整个程序设计的基础,从语法中我们也能够看到这门语言的一些特性.可是话说回来.语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度 ...

  6. Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性

    一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...

  7. 换个语言学一下 Golang (4)——变量与常量

    一.变量定义 所谓的变量就是一个拥有指定名称和类型的数据存储位置. //看一个例子 package main import ( "fmt" ) func main() { var ...

  8. golang初识 和 变量,常量,iota

    目录 一.go语言与python 1. go语言 2. python 二.变量相关 1. go语言的基本语法 2. 标识符和关键字 3. 变量声明 (1)声明变量时未指定初始值 (2)声明变量时指定初 ...

  9. go基础知识之变量,类型,常量,函数

    3 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值.在 Go 中,有多种语法用于声明变量. 声明单个变量 var name type 是声 ...

随机推荐

  1. LeetCode.atoi

    请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之 ...

  2. mysql 经纬度求距离

    SELECT id,lng,lat,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat*PI()/180)/2),2)+COS(lat1*PI( ...

  3. 对oracle用户创建asm磁盘

    --root用户执行vi /etc/sysctl.conf #Install oracle settingfs.aio-max-nr = 1048576fs.file-max = 6815744#ke ...

  4. STM32F0使用LL库实现Modbus通讯

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.本篇将说明基于LL实现USART通讯. 1 ...

  5. 微信小程序开发01 --- 微信小程序项目结构介绍

    一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...

  6. 2-3、配置Filebeat

    配置Filebeat 提示:Filebeat modules为常见的日志格式提供了最快的入门操作. 如果要使用Filebeat模块,请跳过本节,包括剩余的入门步骤,并直接转到快速入门:Quick st ...

  7. ORACLE安装报错解决

    今天在虚拟机中安装了一个WINDOWS系统,用于安装oracle服务器:从安装到使用中出现了很多的问题,把这些问题解决掉,花了不少时间,查了不少的资料. 第一个,我在安装过程中,出现了ORA-0092 ...

  8. .net基础学java系列(三)徘徊反思

    .net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...

  9. The type 'Expression<>' is defined in an assembly that is not referenced.You must add a reference to assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

    在我将一个.net framework 4.0+mvc4+ef5的项目,升级到.net framework 4.6.1+mvc5+ef6之后,解决了所有的升级带来的问题,唯独在razor的cshtml ...

  10. 乌班图平台kurento +kurento-one2many-call+videojs-panorama+RICOH THETA实现VR直播

    这个小项目是公司要求的,开发大佬找到的资源,让小弟搭建一下子.第一次体验VR视频效果,感觉很好. 下面将搭建过程简单写出来,有需求的可以参考下. 一.乌班图平台搭建 按照centos7的习惯搞了一下乌 ...