【Go语言系列】2.3、Go语言基本程序结构:变量及常量
1、什么变量
变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。
1.1变量声明
Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。
第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type
v_name = value
第二种,根据值自行判定变量类型。
var v_name = value
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
v_name := value // 例如
var a int = 10
var b = 10
c : = 10
(冒号和等号的组合:=),用于明确表达同时进行变量声明和初始化的工作。
1.2、多变量声明
1、类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
2、自动推断,不需要显示声明类型
var vname1, vname2, vname3 = v1, v2, v3
vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误
3、类型不同多个变量, 全局变量, 局部变量不能使用这种方式
var (
vname1 v_type1
vname2 v_type2
)
实例如下:
package main var x, y int
var ( //这种只能出现在全局变量中,函数体内不支持
a int
b bool
) var c, d int = 1, 2
var e, f = 123, "hello" //这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello" func main(){
g, h := 123, "hello"
fmt.Println(g) //输出变量g
fmt.Println(h) //输出变量h
}
1.3、变量赋值与初始化
在变量声明时,就给变量指定一个值,这个过程叫变量初始化,如:
package main //初始化变量c的值为2;变量d的值为2。
var c, d int = 1, 2
//初始化变量e的值为123;变量f的值为'hello'。
var e, f = 123, "hello" func main(){
//初始化变量g的值为123;变量h的值为'hello'。
g, h := 123, "hello"
fmt.Println(g) //输出变量g
fmt.Println(h) //输出变量h
}
在Go语法中,变量初始化和变量赋值是两个不同的概念。下面为声明一个变量之后的赋值过程:
package main import "fmt" func main() {
//初始化变量g的值为123;变量h的值为'hello'。
g, h := 123, "hello"
g = 234 //将 234 赋值给变量g
fmt.Println(g) //输出变量g
fmt.Println(h) //输出变量h
}
1.4、匿名变量
在Go语言中,单个的下划线“_”是一个特殊的变量,我们称之为匿名变量(anonymous variable),匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用
我们在使用传统的强类型语言编程时,经常会出现这种情况,即在调用函数时为了获取一个值,却因为该函数返回多个值而不得不定义一堆没用的变量。在Go中这种情况可以通过使用匿名变量来避免从而让代码看起来更加的优雅。
假设getTime()函数的定义如下,它返回2个值,分别为hour和minute:
func getTime() (hour, minute int) {
return 11,20
}
若只想获得hour,则:
h,_ := getTime()
2、常量
在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
2.1、 常量定义
常量的定义格式:
const identifier [type] = value
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。举例:
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const Pi, zero float32 = 3.14159265, 0.0 // 常量的多重赋值 // Pi = 3.14159265, zero = 0.0, name = "roy", 无类型整型和字符串常量
const Pi, zero, name = 3.14159265, 0.0, "roy"
2.2、枚举
定义一组常量,在Go语言中叫做枚举,例如:
const (
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
)
2.3、预定义常量
Go语言预定义常量:true、false和iota。其中true、false是两个bool类型的值,这个我们在后面的“数据类型”这一节会讲到。
iota是一个可以被编译器修改的常量。在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1,举例:
package main import (
"fmt"
) func main() {
const (
Sunday = iota
Monday = iota
Tuesday = iota
Wednesday = iota
Thursday = iota
Friday = iota
Saturday = iota
) const (
a = iota
b = iota
)
fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
fmt.Println(a, b) }
以上代码输出:
0 1 2 3 4 5 6
0 1
【Go语言系列】2.3、Go语言基本程序结构:变量及常量的更多相关文章
- GO语言的进阶之路-go的程序结构以及包简介
GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...
- 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 【C语言入门教程】1.1 基本程序结构
基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...
- Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性
一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...
- Go语言系列(三)之数组和切片
<Go语言系列文章> Go语言系列(一)之Go的安装和使用 Go语言系列(二)之基础语法总结 1. 数组 数组用于存储若干个相同类型的变量的集合.数组中每个变量称为数组的元素,每个元素都有 ...
- 《玩转D语言系列》三、轻松大跃进,把它当C语言先用起来
前面说过,本系列文章的前提是您懂C语言,懂面向对象中的一些概念,如果没有任何变成基础,从零开始学习D语言将是一个漫长的过程,因为很多概念都要重新诠释,让一个没有基础的人经过漫长的学习过程,然后还找不到 ...
- 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍
这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...
- 使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)
使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有 ...
- R语言系列:生成数据
R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
随机推荐
- 【java面试】网络通信篇
1.说一下HTTP协议 HTTP协议是超文本传输协议,属于应用层协议,规定了客户端与服务端传输数据的格式:它是无状态的,对于前面传送过的信息没有记录:请求方式有GET,POST,HEAD,PUT,DE ...
- 以其他控制器为目标 在视图中生成输出URL
结果呢:<a href="/Admin">This targets another controller</a>
- halfcheetch win10
HalfCheetah win10配置 1.使用Anaconda Prompt切到程序目录,执行pip install -r requirements.txt 补充说明: 使用pip与conda命令都 ...
- jdk和dubbo的SPI机制
前言:开闭原则一直是软件开发领域中所追求的,开闭原则中的"开"是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的,“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代 ...
- ovirt kvm嵌套虚拟化
嵌 套式虚拟nested是一个可通过内核参数来启用的功能.它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm(AMD)硬件虚拟化.关于 nested的具体介绍,可以看这里 .该特性需要内核升 ...
- 实验3: DHCP 基本配置
实验3-1: DHCP 基本配置 实验目的通过本实验可以掌握:(1)DHCP 的工作原理和工作过程(2)DHCP 服务器的基本配置和调试(3)客户端配置 拓扑结构 实验步骤n 步骤1:配置路由器 ...
- An internal error occurred during: "Launching New_configuration". Path for project must have only on
在Eclipse中按照如下操作 Project -> Properties -> Run/Debug Settings: 1. select "Launching New_con ...
- C++静态成员函数小结
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: ...
- top100tools
Top 100 Tools for Learning 2013 2142 EmailShare Here are the Top 100 Tools for Learning 2013 – the ...
- 如何在网页读取用户IP,操作系统版本等数据demo
我们浏览网页的时候,会不经意间看到,有些地方(如个人的签名档)显示出了个人的IP,操作系统等数据.借助第三方API和请求报头useragent是很容易实现的. <html> <hea ...