Go语言之变量篇(一)

作者: 灰常出色 | 来源:发表于2019-03-03 15:59 被阅读59次
本人原本是C++开发工程师,使用C++已经有8年多的时间,最近在学习Go语言,在学习Go语言的时候,难免会拿Go语言与C++语言做一些比较。

这篇文章便是笔者,在学习Go语言变量的时候,整理的一些知识。

一、变量定义的格式

C++的变量定义表达式如下所示:

Type name = expression;,例如 int number = 10;  // 表示的是 一个数据类型是int,名字叫做 number 的变量,它的初始值是 10。

Go的变量定义表达式如下所示:

var name type = expression ,例如 var number int  = 10  // 表示的是 一个数据类型是int,名字叫做 number 的变量,它的初始值是 10。

区别:

1.C++ 需要在一句话的结尾 加上一个;号,用来表示语句结束,Go语言则不需要;号,它是通过换行来表示该语句结束的。

2.C++ 和Go的语句定义格式完全不同,C++是 Type name = expression; Go是var name type = expression

3.C++和Go语言没有赋初始值的变量的初始化数值不相同。

1)C++的初始值不指定的话,例如int number; number的值有可能是0,也有可能是随机值,这个取决于number 是一个局部变量还是一个全局变量或者static变量,局部变量的话,number的值是个随机值,全局和static变量的话,number的值会是0。

2) Go的初始值不指定的话,例如var number int; 这里会被初始化为0。Go语言里面不存在未初始化的变量。Go规定,如果表达式省略,初始化数值,数字对应0,布尔型对应false,字符串对应"",对于接口和引用类型为nil。

4.C++和Go语言的变量声明,Go更加的强大

C++ 中 变量没有初始化的话,可以采用变量列表的方式,否则只能一条语句一个变量,例如:

int a,b,c; // 其中a,b,c 都必须是整型,类型必须一致。

int a = 10; // 必须一个变量一条语句

Go 中书写方式更为灵活多变,例如:

var a, b, c int // 表示a,b,c 都是int型数据,同时初始化为0

var a , b, c = true, 10, "hello" // 省略了数据类型,并且 a,b,c可以分别是几种不同的数据类型,其中a是bool型,b是int型, c是string型。

5.Go语言中有变量和短变量声明两种方式,C++ 中则只有变量

短变量声明格式为: name := expression // name的类型通过expression来决定。因为它短小,灵活,主要用于局部变量的声明和初始化。

var声明的变量通常为那些跟初始化表达式类型不一致的局部变量,或者后面才对变量赋值的情况。

个人认为短变量声明存在的主要原因是,Go语言的 多种类型变量可以在同一行赋值的支持,例如 a, b := 1,true  // 在这里a,b可以都是新的变量并且不是初始化的时候,或者a,b中有一个是新变量即可。 var变量对于后者的支持就不太好,必须是两行才能保证,如下所示:

var a , b = 0 , false // step1: a, b必须都得先定义出来

a,b = 1, true  // step 2: a,b 在进行赋值

而短变量只需要一句就可以表示。

二、变量的作用域和生存周期

在谈C++和Go的区别之前,我们先看一看,作用域和生命周期是什么东西。

作用域:存在于编译阶段,用来表示变量或者方法的适用范围,一般都是大括号内的那一部分,叫做一个程序块,这一块内容,便是一个作用域。

生命周期:是执行阶段的概念,从一个变量实例被创建,到该变量被释放的时间周期。

区别:

1.C++语言,在作用域范围这个概念下,{}之内声明的变量,在该代码段可以被使用,在该{}之外生成的同名变量,会被覆盖掉。

Go语言,在作用域概念下,与C++语言并无区别。不过短变量声明使用有一个点要注意。例如:

var num int
var b string
{
    a, num :=  false,  5  // 这里的num会被认为是一个新变量
    b  =  “hello”  //  这里的b与{}外的b是同一个变量
}

2.C++在生存周期这个范围内,局部变量非指针的话,有一个static是特例,这个的生存周期是整个进程从创建到销毁,这一段时间。其他的局部变量,都是程序运行的时候从{执行到}这一运行周期。

Go语言的变量实例的生命周期与C++的类似,不过Go有一个变量“外溢”的概念,这种变量的生命周期取决于“外溢”的生命周期。


灰子作于二零一九年三月三日。

【原创作品,欢迎分享,请勿转载,谢谢尊重!!】

相关文章

  • golang内存逃逸

    一篇很好的博客: Go 语言机制之栈与指针 Go 语言机制之逃逸分析 Go 语言机制之内存剖析 Go 语言机制之数...

  • Go 学习

    go语言局部变量分配在栈还是堆Golang 垃圾回收剖析go语言坑之for range

  • golang的helloworld

    go语言初识 go语言的变量

  • Go语言探索 - 4(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,主要学习了Go语言的变量、指针、指针变量、常量以及类型转换...

  • GO语言初级学习之代码案例08(生产者消费者模型)

    GO语言初级学习之代码案例08-生产者消费者模型 @(go语言 黑马)[GO语言] 条件变量模拟生产者消费者模型 ...

  • Go语言探索 - 8(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章主要学习了Go 语言变量以及变量的作用域。本篇文章主要学习的是...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • Go语言学习笔记-变量与作用域

    Go 语言变量的声明 Go 语言是静态类型语言,因此变量 (variable) 是有明确类型的,编译器也会检查变量...

  • GO语言基础(六)

    定义变量 Go语言里面定义变量有很多种方式。使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量...

  • go语言学习(2)--变量与常量

    任何编程语言都有变量,下面来学一学 go 的变量与其他语言有什么异同 go变量的基本类型 bool,string ...

网友评论

    本文标题:Go语言之变量篇(一)

    本文链接:https://www.haomeiwen.com/subject/fxdpuqtx.html