声明单一变量

声明一个变量的语法为:var name type,例如

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var age int // variable declaration
  7. fmt.Println("my age is", age)
  8. }

语句 var age int 声明了一个类型为 int,名称为 age 的变量。在这里我们没有给它赋任何值。如果一个变量没有被赋予任何值,Go 会自动将这个变量初始化为其类型的 0值,比如这里的 age 将被赋值为 0。运行这个程序,将得到如下输出:

  1. my age is

一个变量可以被赋予其类型的任何值。例如,在上例中,age 可以被赋予任何整型值:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var age int // variable declaration
  7. fmt.Println("my age is ", age)
  8. age = //assignment
  9. fmt.Println("my age is", age)
  10. age = //assignment
  11. fmt.Println("my new age is", age)
  12. }

输出如下:

  1. my age is
  2. my age is
  3. my new age is

声明一个带初值的变量

在声明变量时可以指定其初始值。

声明一个带初值的变量的语法为:var name type = initialvalue,例如:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var age int = // variable declaration with initial value
  7.  
  8. fmt.Println("my age is", age)
  9. }

在上面的程序中, age 是一个 int 型的变量,初始值为 29运行上面的程序,输出如下。可以看到 age 的初始值确实为29

  1. my age is

类型推导

如果声明一个变量时提供了初始值,Go可以根据该初始值来自动推导变量的类型。因此如果声明变量时提供了初始值,就可以不必指定其类型。

也就是说,如果声明变量的形式为:var name = initialvalue,Go将根据 initialvalue 自动推导变量 name 的类型。

在下面的例子中,你可以看到声明变量 age 时并没有指定其类型。因为 age 的初值为 29,Go 自动推断其类型为 int

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var age = // type will be inferred
  7.  
  8. fmt.Println("my age is", age)
  9. }

多变量声明

多个变量可以在一条语句中声明。

多变量声明的语法为:var name1, name2 type = initialvalue1, initialvalue2,例如:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var width, height int = , //declaring multiple variables
  7.  
  8. fmt.Println("width is", width, "height is", height)
  9. }

如果指定了初始值,则 type 可以省略。下面的程序利用类型推导声明了多个变量:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var width, height = , //"int" is dropped
  7.  
  8. fmt.Println("width is", width, "height is", height)
  9. }

可以看到输出结果为:

  1. width is height is

正如你猜想的那样,如果不指定 width 和 height 的初值,它们将自动被赋值为 0,也就是说它们将以 0 作为初值:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var width, height int
  7. fmt.Println("width is", width, "height is", height)
  8. width =
  9. height =
  10. fmt.Println("new width is", width, "new height is ", height)
  11. }

将会输出:

  1. width is height is
  2. new width is new height is

有些时候我们需要在一条语句中声明多个不同类型的变量。我们可以使用下面的语法达到此目的:

  1. var (
  2. name1 = initialvalue1,
  3. name2 = initialvalue2
  4. )

下面的程序就用上面的语法声明了多个不同类型的变量:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var (
  7. name = "naveen"
  8. age =
  9. height int
  10. )
  11. fmt.Println("my name is", name, ", age is", age, "and height is", height)
  12. }

这里我们声明了一个字符串类型的变量 name,以及两个整型的变量 age 和 height。(我们将在下一篇教程中讨论 Golang 中可用的类型)。上面的程序将会产生如下输出:

  1. my name is naveen , age is and height is

速记声明

Go 提供了另一种简洁的声明变量的方式。这种方式称为速记声明(shorthand declaratiion)。速记声明使用 := 操作符来声明变量。

速记声明的语法为:name := initialvalue,例如:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. name, age := "naveen", //short hand declaration
  7.  
  8. fmt.Println("my name is", name, "age is", age)
  9. }

上面的程序,输出如下:

  1. my name is naveen age is

记声明要求必须给声明的每一个变量都提供初始值。下面的 程序将会报错:assignment count mismatch: 2 = 1。这是因为 没有给 age 提供初始值。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. name, age := "naveen" //error
  7.  
  8. fmt.Println("my name is", name, "age is", age)
  9. }

速记声明要求在 := 的左边必须至少有一个变量是新声明的。

一个变量不能被赋予与其类型不同的值。下面的程序将报错:cannot use "naveen" (type string) as type int in assignment。这是因为 age 被声明为 int 类型,但是我们试图将 string 类型的值赋给它。

  1. package main
  2.  
  3. func main() {
  4. age := // age is int
  5. age = "naveen" // error since we are trying to assign a string to a variable of type int
  6. }

Golang教程:变量的更多相关文章

  1. linux上java和golang环境变量的设置

    JAVA环境变量   (1).打开~/.bashrc完成环境配置( 作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效.)       文件追加            expo ...

  2. Golang的变量定义及使用案例

    Golang的变量定义及使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.变量的定义 package main import "fmt" func m ...

  3. Bash简明教程--变量

    1. 前言 Bash是一门流行在*nix系统下的脚本语言.作为一门脚本语言,变量是一门语言的基本要素,在这篇教程中,我们将学习Bash中的变量是怎么表示的,以及变量相关的一些语法规则. 2. Bash ...

  4. Golang之变量去哪儿

    目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 参考资料 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的 ...

  5. [golang note] 变量常量

    变量 • 变量声明 √ golang变量声明的关键字为var. √ golang变量声明时类型信息放置在变量名之后. ▶ 单个变量声明 ▪ 语法如下 var name type ▪ 示例如下 var ...

  6. Golang教程:Map

    什么是 map? Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:mak ...

  7. Golang教程:数组和切片

    数组 数组是类型相同的元素的集合.例如,整数 5, 8, 9, 79, 76 的集合就构成了一个数组.Go不允许在数组中混合使用不同类型的元素(比如整数和字符串). 声明 var variable_n ...

  8. Golang教程:包

    什么是包?为什么使用包? 到目前为止我们见到的 Go 程序都只有一个文件,文件中包含了一个main函数和几个其他函数.在实际中这种将所有代码都放在一个文件里的组织方式是不可行的.这样的组织方式使得代码 ...

  9. Golang教程:常量

    定义常量 常量(constant)表示固定的值,比如:5,-89,"I love Go",67.89 等等. 考虑如下程序: var b string = "I love ...

随机推荐

  1. python的requests库详解

    快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其假设你已经安装了 Requests.如果还没有,去安装一节看看吧. 首先,确认一下: Requests 已安装 Req ...

  2. 「AH2017/HNOI2017」礼物

    题目链接 戳我 \(Solution\) 应为我们可以将任意一个数列加上一个非负整数,即可以变为将一个数列加上一个整数(可以为负),我们将这个整数设为\(z\).所以要求的式子的变为: \[\sum_ ...

  3. CXF动态调用wsdl接口

    1.application.properties文件中配置接口url 2.工具类 package com.vulnverify.core.utils; import java.io.IOExcepti ...

  4. iperf3网络测试工具

    一.简介: iperf3是一个网络速度测试工具,支持IPv4与IPv6,支持TCP.UDP.SCTP传输协议,可在Windows.Mac OS X.Linux.FreeBSD等各种平台使用,是一个简单 ...

  5. linux命令之系统管理命令(下)

    1.chkconfig:管理开机服务 该命令为linux系统中的系统服务管理工具,可以查询和更新不同的运行等级下系统服务的启动状态. 选项 说明 --list(常用) 显示不同运行级别下服务的启动状态 ...

  6. day13学python 协程+事件驱动

    协程+事件驱动 协程 (微线程)--用处多,重点 当调度切换时 靠寄存器上下文和栈保存 要使用时再调用(即可不会因io传输数据卡壳 从而耗时无法继续进行)实现并行 优缺点: 优点: 1 无需同线程上下 ...

  7. 关于C#低版本升级高版本时,项目中引用Microsoft.Office.Interop.Word,程序提示不存在类型或命名空间名office.

    Report.cs里using Microsoft.Office.Interop.Word;就会报错:编译器错误消息: CS0234: 命名空间“Microsoft.Office”中不存在类型或命名空 ...

  8. 2019建模美赛B题(派送无人机)M奖论文

    昨天上午出了建模美赛的结果,我们小组获得的是M奖,感觉挺开心的.我一直觉得拿O奖那种是个概率事件,需要天时地利人和的各种因素都合适才行,所以看到自己是M奖,感觉自己的能力已经得到了认可就很满意了.今天 ...

  9. jquery之链式调用,层级菜单

    一. 链式调用的含义 jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写: $('#div1') // id为div1的元素 .children('ul ...

  10. TCP的超时与重传

    一.引言 对于每个TCP连接,TCP管理4个不同的定时器 重传定时器用于当希望收到另一端的确认. 坚持 (persist) 定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口. 保活 (ke ...