1、什么变量

变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。

1.1变量声明

Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。

第一种,指定变量类型,声明后若不赋值,使用默认值。

  1. var v_name v_type
  2. v_name = value

第二种,根据值自行判定变量类型。

  1. var v_name = value

第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。

  1. v_name := value
  2.  
  3. // 例如
  4. var a int = 10
  5. var b = 10
  6. c : = 10

(冒号和等号的组合:=),用于明确表达同时进行变量声明和初始化的工作。

1.2、多变量声明

1、类型相同多个变量, 非全局变量

  1. var vname1, vname2, vname3 type
  2. vname1, vname2, vname3 = v1, v2, v3

2、自动推断,不需要显示声明类型

  1. var vname1, vname2, vname3 = v1, v2, v3
  2. vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误

3、类型不同多个变量, 全局变量, 局部变量不能使用这种方式

  1. var (
  2. vname1 v_type1
  3. vname2 v_type2
  4. )

实例如下:

  1. package main
  2.  
  3. var x, y int
  4. var ( //这种只能出现在全局变量中,函数体内不支持
  5. a int
  6. b bool
  7. )
  8.  
  9. var c, d int = 1, 2
  10. var e, f = 123, "hello"
  11.  
  12. //这种不带声明格式的只能在函数体中出现
  13. //g, h := 123, "hello"
  14.  
  15. func main(){
  16. g, h := 123, "hello"
  17. fmt.Println(g) //输出变量g
  18. fmt.Println(h) //输出变量h
  19. }

1.3、变量赋值与初始化

在变量声明时,就给变量指定一个值,这个过程叫变量初始化,如:

  1. package main
  2.  
  3. //初始化变量c的值为2;变量d的值为2。
  4. var c, d int = 1, 2
  5. //初始化变量e的值为123;变量f的值为'hello'。
  6. var e, f = 123, "hello"
  7.  
  8. func main(){
  9. //初始化变量g的值为123;变量h的值为'hello'。
  10. g, h := 123, "hello"
  11. fmt.Println(g) //输出变量g
  12. fmt.Println(h) //输出变量h
  13. }

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

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. //初始化变量g的值为123;变量h的值为'hello'。
  7. g, h := 123, "hello"
  8. g = 234 //将 234 赋值给变量g
  9. fmt.Println(g) //输出变量g
  10. fmt.Println(h) //输出变量h
  11. }

1.4、匿名变量

在Go语言中,单个的下划线“_”是一个特殊的变量,我们称之为匿名变量(anonymous variable),匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用

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

假设getTime()函数的定义如下,它返回2个值,分别为hour和minute:

  1. func getTime() (hour, minute int) {
  2. return 11,20
  3. }

若只想获得hour,则:

  1. h,_ := getTime()

2、常量

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

2.1、 常量定义

常量的定义格式:

  1. const identifier [type] = value

你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。举例:

  1. const Pi float64 = 3.14159265358979323846
  2. const zero = 0.0 // 无类型浮点常量
  3. const Pi, zero float32 = 3.14159265, 0.0 // 常量的多重赋值
  4.  
  5. // Pi = 3.14159265, zero = 0.0, name = "roy", 无类型整型和字符串常量
  6. const Pi, zero, name = 3.14159265, 0.0, "roy"

2.2、枚举

定义一组常量,在Go语言中叫做枚举,例如:

  1. const (
  2. Sunday = 0
  3. Monday = 1
  4. Tuesday = 2
  5. Wednesday = 3
  6. Thursday = 4
  7. Friday = 5
  8. Saturday = 6
  9. )

2.3、预定义常量

Go语言预定义常量:true、false和iota。其中true、false是两个bool类型的值,这个我们在后面的“数据类型”这一节会讲到。

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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. func main() {
  8. const (
  9. Sunday = iota
  10. Monday = iota
  11. Tuesday = iota
  12. Wednesday = iota
  13. Thursday = iota
  14. Friday = iota
  15. Saturday = iota
  16. )
  17.  
  18. const (
  19. a = iota
  20. b = iota
  21. )
  22. fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
  23. fmt.Println(a, b)
  24.  
  25. }

以上代码输出:

  1. 0 1 2 3 4 5 6
  2. 0 1

【Go语言系列】2.3、Go语言基本程序结构:变量及常量的更多相关文章

  1. GO语言的进阶之路-go的程序结构以及包简介

    GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...

  2. 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  3. 【C语言入门教程】1.1 基本程序结构

    基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...

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

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

  5. Go语言系列(三)之数组和切片

    <Go语言系列文章> Go语言系列(一)之Go的安装和使用 Go语言系列(二)之基础语法总结 1. 数组 数组用于存储若干个相同类型的变量的集合.数组中每个变量称为数组的元素,每个元素都有 ...

  6. 《玩转D语言系列》三、轻松大跃进,把它当C语言先用起来

    前面说过,本系列文章的前提是您懂C语言,懂面向对象中的一些概念,如果没有任何变成基础,从零开始学习D语言将是一个漫长的过程,因为很多概念都要重新诠释,让一个没有基础的人经过漫长的学习过程,然后还找不到 ...

  7. 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍

    这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...

  8. 使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)

    使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有 ...

  9. R语言系列:生成数据

    R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...

  10. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

随机推荐

  1. 在winform中使用cefsharp.winform嵌入浏览器(含视频教程)

    免费视频教程和源码: https://www.bilibili.com/video/av84573813/ 1. 开始使用CefSharp在Winform中嵌入网页 2. 解决重复打开Cefsharp ...

  2. 团队项目——Alpha发布1

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/homework 这个作业要求在哪里 https ...

  3. 自定义BeanDefinitionRegistryPostProcessor注册bean

    自定义BeanDefinitionRegistryPostProcessor 概述 BeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProce ...

  4. JDK 1.8 完整日期时间Api (文末附示例)

    一.背景 jdk 1.8 之前, Java 时间使用java.util.Date 和 java.util.Calendar 类. Date today = new Date(); System.out ...

  5. 安装node,vue编译环境

    1.安装npm:wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bashnvm inst ...

  6. BaseAdapter的三种表达式分析,startActivityForResult的使用

    (一)BaseAdapter的三种表达式: ①逗比式: public View getView(int position, View convertView, ViewGroup parent) { ...

  7. oracle11g和12c区别

    11g和12c 1.12c使用更为强大的sql执行与优化算法 2.oracle在12c完全使用云和可插拔数据库概念 3.oracle 12c的RAC使用flex(让rg直接化) 模式,让rg管理更加细 ...

  8. Java学习笔记----打印基本数据类型范围

    /** * Created by N3verL4nd on 2016/11/10. */ public class HelloWorld { public static void main(Strin ...

  9. ConnectWeb

    @echo off MODE con: COLS=60 lines=20 color a taskkill /f /im knatsvc.exe taskkill /f /im DrMain.exe ...

  10. 一些可以查询IP地理位置、身份证所在地、手机归属地的接口

    查询IP http://ip.dnsexit.com/ 新浪的IP查询接口: 新浪的:http://counter.sina.com.cn/ip?ip=IP地址 返回Js数据,感觉不是很精确,可以把问 ...