变量


• 变量声明

 golang变量声明的关键字为var

 golang变量声明时类型信息放置在变量名之后

▶ 单个变量声明

▪ 语法如下

var name type

▪ 示例如下

var v1 int             // 整形
var v2 *int // 指针
var v3 string // 字符串
var v4 []int // 数组切片
var v5 []int // 数组
var v6 map[string]int // map
var v8 func(a int) int // 函数
var v7 struct { // 结构体
f int
}

▶ 多个变量声明

▪ 语法如下

var (
name1 type1
name2 type2
name3 type3
...
)

▪ 示例如下

var (
v1 int // 整形
v2 *int // 指针
v3 string // 字符串
v4 []int // 数组切片
v5 []int // 数组
v6 map[string]int // map
v8 func(a int) int // 函数
v7 struct { // 结构体
f int
}
)

• 变量声明时初始化

▶ 第一种方式

▪ 语法如下

var name type = value

var (
name1 type1 = value1
name2 type2 = value2
name3 type3 = value3
...
)

▪ 示例如下

var v1 int =
var (
v2 int =
v3 string = "abc"
)

▶ 第二种方式

▪ 语法如下

var name = value // 编译器可以自动推导出变量的类型

▪ 示例如下

var v1 =
var (
v2 =
v3 = "abc"
)

▶ 第三种方式

 golang引入了一个c和c++中没有的符号:=,用于明确表明同时进行变量声明和初始化的工作

 出现在:=左边的变量不应该是已声明过,否则编译器将给出错误:no new variables on left side of :=。

▪ 语法如下

name := value // 编译器可以自动推导出变量的类型

▪ 示例如下

v1 :=
v2 :=
v3 := "abc"

• 变量赋值

▶ 多元赋值

▪ 语法如下

variable1, variable2, ... variablen = value1, value2, ... valuen

▪ 示例如下

var v1, v2 int
v1, v2 = ,

多元赋值支持不引入中间变量来交换两个变量的值。

v1 :=
v2 :=
v1, v2 = v2, v1

• 变量包可见性

 golang中,以大写字母开头的变量在包外可见,否则为包内私有。

例如下面golearning工程下有两个包:main包和math包。其中src/math/math.go中定义了一个Pi变量,在src/main/main.go中使用该变量:

// math.go
package math var Pi float64 = 3.14159265358979323846 // main.go
package main import (
"fmt"
"math"
) func main() {
fmt.Println(math.Pi)
}

如果将Pi改为小写pi,那么编译器将给出错误:

常量


 golang中,常量是指编译期间运算得出且不可改变的值

• 常量定义

 golang常量定义的关键字为const

// 定义单个常量
const Pi float64 = 3.14159265358979323846 // 定义多个常量
const (
Size int64 =
Eof int64 = -
)

 golang常量定义可以限定常量类型,也可以不限定。如果常量定义时没有限定类型,那么它与字面常量一样,是一个无类型常量

// 定义单个常量
const Pi = 3.14159265358979323846 // 无类型浮点常量 // 定义多个常量
const (
Size = // 无类型整型常量
Eof = - // 无类型整型常量
)

 golang常量定义的右值可以是一个在编译期运算的常量表达式,这与c语言中宏的性质是一样的。

const Mask =  <<             // correct
const Path = os.Getenv("PATH") // incorrect : const initializer os.Getenv("PATH") is not a constant

• 特殊常量

▶ 字面常量

 字面常量(literal),是指程序中硬编码的常量

 golang中字面常量是无类型的,只要该字面常量在相应类型的值域范围内,就可作为该类型的常量。

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

▶ 预定义常量

 golang预定义了这些常量:truefalseiota

▪ true和false

 预定义常量true和false所属的基础类型为bool。

package main

import (
"fmt"
"reflect"
) func main() {
const Mask = true
fmt.Println(reflect.TypeOf(Mask)) // bool
}

▪ iota

 预定义常量iota所属的基础类型为int。

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

const (
a = iota //
b = iota //
c = iota //
) const (
d = << iota //
e = << iota //
f = << iota //
) const (
g = * iota //
h = * iota //
i = * iota //
)

 如果两个const赋值语句的表达式一样,那么可以省略后一个赋值表达式。

const (
a = iota //
b //
c //
) const (
d = << iota //
e //
f //
) const (
g = * iota //
h //
i //
)

▶ 枚举

 golang并不支持众多其他语言中支持的enum关键字。

 在golang中定义枚举值的方式:在const后跟一对圆括号的方式定义一组常量。

const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
NumberOfDays
)

• 常量包可见性

 golang中,以大写字母开头的常量在包外可见,否则为包内私有。

[golang note] 变量常量的更多相关文章

  1. iOS开发Swift篇(01) 变量&常量&元组

    iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...

  2. C#基础总结之一变量常量-if嵌套语句-witch结构-类型转换

    //Console.WriteLine("Hello World"); //打印显示 //Console.ReadLine(); //接收输入的值 //Console.ReadKe ...

  3. 李洪强iOS开发Swift篇---11_变量&常量&元组

    李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...

  4. PHP 获得当前页面所有变量常量的值

    get_defined_vars() - 返回由所有已定义变量所组成的数组,这个函数在二次开发的时候用起来非常给力: get_defined_constants();可以返回当前的所有常量 zend的 ...

  5. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  6. TF:Tensorflow定义变量+常量,实现输出计数功能—Jason niu

    #TF:Tensorflow定义变量+常量,实现输出计数功能 import tensorflow as tf state = tf.Variable(0, name='Parameter_name_c ...

  7. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...

  8. Swift-基础语法之变量&常量&元组

    使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ...

  9. Java复习3.变量.常量.String.

    Java 中的变量常量数据类型 20131004 前言: 还是国庆节,无聊的很,就没事复习点Java的知识,其实C/C++基本上是现在大型企业面试的语言,但是多学习点Java是没有坏处的,而且,将来工 ...

随机推荐

  1. Ubuntu 16.04 更换阿里云源

    Ubuntu 16.04 更换阿里云源sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份sudo gedit /etc/apt/so ...

  2. 第二百五十五节,Bootstrap项目实战--关于

    Bootstrap项目实战--关于 html <!DOCTYPE html> <html lang="zh-cn"> <head> <me ...

  3. Windows 安装、重装MySQL时,报错:could not start the service mysql

    原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的). 然后 ...

  4. php -- 修改字符串的编码格式

    网上的都是这样用的 $content = iconv("utf-8","gb2312",$content); 这样做其实也对着了,看着确实是把utf-8转化为g ...

  5. Codeforces Round #266 (Div. 2)

    http://codeforces.com/contest/466 噗,b没写出来啊.a写完后过了40分钟了啊,罚时4次啊!果然太弱 总结: a题看错题,没有考虑m>=n其实也是可行的,导致调了 ...

  6. uc 调试

    UC浏览器开发者版 目录[隐藏] 1 关于RI 2 准备工作 3 调试方式 相关下载 1 关于RI 目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机 ...

  7. 自动化测试的组成部分:SEARCH

    在考虑自动化测试用例时,不仅仅要考虑测试的执行步骤.在运行任何步骤之前,程序必须处在能够执行测试的状态.在测试执行后,至关重要的是知道测试是否通过,并且测试结果一定要被保存到某处以待检查或进一步分析. ...

  8. python虚拟机运行原理

    近期为了面试想要了解下python的运行原理方面的东西,奈何关于python没有找到一本类似于深入理解Java虚拟机方面的书籍,找到了一本<python源码剖析>电子书,但是觉得相对来说最 ...

  9. ios 自定义UITableView中分组的标题sectionview

    //Section的标题栏高度 -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)sec ...

  10. ECharts使用(1)(转载)

    转载自http://www.cnblogs.com/Olive116/p/3634480.html 1.  EChart最新的文档目录. 首先创建一个解决方案,目录如下: 之前的一篇文章中讲到如果要使 ...