脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 详解Golang编程中的常量与变量

详解Golang编程中的常量与变量

2020-04-28 10:28脚本之家 Golang

这篇文章主要介绍了详解Golang编程中的常量与变量,是Go语言入门学习中的基础知识,需要的朋友可以参考下

Go语言常量
常量是指该程序可能无法在其执行期间改变的固定值。这些固定值也被称为文字。

常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型。还有枚举常量。

常量是一样,只是它们的值不能自己定义后进行修改常规变量处理。

整型常量
一个整数文字可以是十进制,八进制,或十六进制常数。前缀指定基或基数:0x或0X的十六进制,0表示八进制,并没有为十进制。

一个整数文字也可以有一个后缀为U和L的组合,分别为无符号和长整型。后缀可以是大写或小写,并且可以以任意顺序。

这里是整数常量的一些例子:

复制代码 代码如下:

212         /* Legal */
215u        /* Legal */
0xFeeL      /* Legal */
078         /* Illegal: 8 is not an octal digit */
032UU       /* Illegal: cannot repeat a suffix */


以下是不同类型的整型常量的例子:

复制代码 代码如下:

85         /* decimal */
0213       /* octal */
0x4b       /* hexadecimal */
30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */


浮点文本(常量)
浮点字面具有一个整数部分,一个小数点,一个小数部分,和一个指数部分。你可以表示十进制形式或指数形式浮点文字。

 

同时采用十进制形式表示,则必须包括小数点,指数,或两者并用而指数形式表示,则必须包括整数部分,小数部分,或者两者兼而有之。有符号的指数,通过e或E表示

下面是浮点面值的一些例子:

复制代码 代码如下:

3.14159       /* Legal */
314159E-5L    /* Legal */
510E          /* Illegal: incomplete exponent */
210f          /* Illegal: no decimal or exponent */
.e55          /* Illegal: missing integer or fraction */


转义序列
有一些字符在Go中,前面有一个反斜杠他们将有特殊的含义,它们被用来表示类似的换行符(\n)或制表符(\t)。在这里,有一些这样的转义序列代码的列表:

 

详解Golang编程中的常量与变量

以下为例子来说明一些转义字符序列:

复制代码 代码如下:


package main

 

import "fmt"

func main() {
   fmt.Printf("Hello\tWorld!")
}


当上述代码被编译和执行时,它产生了以下结果:

复制代码 代码如下:

Hello   World!


字符串文字
字符串文字或常量用双引号“”。一个字符串包含类似于字符文字字符:普通字符,转义序列和通用字符。

 

您可以使用字符串和分隔使用空格打破一个长行成多行。

下面是字符串的一些例子。所有的三种形式是相同的字符串。

复制代码 代码如下:


"hello, dear"

 

"hello, \

dear"

"hello, " "d" "ear"


const 关键字
您可以使用 const 前缀来声明常量使用特定的类型如下:

复制代码 代码如下:

const variable type = value;


下面的例子说明了它的细节:

复制代码 代码如下:


package main

 

import "fmt"

func main() {
   const LENGTH int = 10
   const WIDTH int = 5  
   var area int

   area = LENGTH * WIDTH
   fmt.Printf("value of area : %d", area)  
}


当上述代码被编译和执行时,它产生了以下结果:

复制代码 代码如下:

value of area : 50


请注意,这是一个良好的编程习惯大写定义常量。

 

Go语言变量
变量是什么,只不是给定到存储区域,我们的程序可以操纵的名称。在Go中每个变量具有特定的类型,它确定的大小和可变的存储器的布局;能确定存储器内存储的值的范围;和组操作可以施加到变量。

一个变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因为Go是区分大小写的。基于该基本类型在前面的章节中说明的那样,将有以下基本变量类型:

详解Golang编程中的常量与变量

Go编程语言也可以定义各种其他类型的变量,我们将在以后的章节列出,如:枚举,指针,数组,结构,联合,等等。对于本章覆盖,让我们只学习研究的基本变量类型。

在Go中变量定义:
一个变量的定义是指,告诉编译器在哪里,有多少创建存储变量。变量定义指定一个数据类型,并且包含的该类型,如下的一个或多个变量的列表:

复制代码 代码如下:

var variable_list optional_data_type;


在这里,optional_data_type可以包括字节,整型,float32,complex64,布尔或任何用户定义的对象等有效Go的数据类型,variable_list可以由用逗号分隔的一个或多个标识符名称。一些有效的声明如下所示:

复制代码 代码如下:

var    i, j, k int;
var   c, ch byte;
var  f, salary float32;
d = 42;


这一行var i, j, k; 既声明并定义了变量i,j和k;这指示编译器创建一个名为i,j和k的 int类型变量。

 

变量可以初始化(分配初始值)在他们的声明。变量的类型是由编译器自动根据传递给它的值判断。初始化包括一个等号后跟一个常量表达式如下:

复制代码 代码如下:

variable_name = value;


一些实例是:

复制代码 代码如下:

d = 3, f = 5;    // declaration of d and f. Here d and f are int


对于没有初始化定义:具有静态存储时间变量的隐含零初始化(所有字节的值为0);所有其它变量的初始值是它们的数据类型的零值。

 

静态类型声明
静态类型的变量声明保障到编译器,有一个变量存在具有给定类型和名称,这样编译器进行进一步的编辑,而不需要对变量的完整细节。变量声明有其意义在编译时止,编译器需要实际的变量声明在链接程序时。

示例
试试下面的例子,其中变量已经被声明为有型,并且已被定义及主要函数内部初始化:

复制代码 代码如下:


package main

 

import "fmt"

func main() {
   var x float64
   x = 20.0
   fmt.Println(x)
   fmt.Printf("x is of type %T\n", x)
}


让我们编译和运行上面的程序,这将产生以下结果:

复制代码 代码如下:

20
x is of type float64


动态类型声明/类型推断
动态类型变量声明要求编译器解释的基础上传递给它值变量的类型。编译器不需要一个变量静态有类型的必然要求。

 

示例
试试下面的例子,其中的变量已经声明没有任何类型的,并已确定在主函数中初始化。如果类型推断的,我们已经初始化的变量y使用:=运算符,x初始化使用=运算符。

复制代码 代码如下:


package main

 

import "fmt"

func main() {
   var x float64 = 20.0

   y := 42
   fmt.Println(x)
   fmt.Println(y)
   fmt.Printf("x is of type %T\n", x)
   fmt.Printf("y is of type %T\n", y) 
}


让我们编译和运行上面的程序,这将产生以下结果:

复制代码 代码如下:

20
42
x is of type float64
y is of type int


混合变量声明
不同类型的变量可以一步到位使用类型推断声明。

 

例子

复制代码 代码如下:


package main

 

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo" 
 
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}


让我们编译和运行上面的程序,这将产生以下结果:

复制代码 代码如下:

3
4
foo
a is of type int
b is of type int
c is of type string


在Go中的左值和右值:
在Go中有两种表达式:

 

lvalue : 引用一个存储器位置的表达式被称为“左值”表达。左值可能显示为任一左手或赋值的右侧。

rvalue : 术语右值是指被存储在存储器中的某些地址的数据值。右值是不能分配给它的值,这意味着右值可能出现在赋值的右侧而不是左侧的表达式。

变量是左值等都可能出现在赋值的左侧。数字文字是右值,因此可能不会被分配,不能出现在左侧。下面是一个有效语句:

复制代码 代码如下:

 x = 20.0


但是,下面是不是一个有效的声明,并会产生编译时错误:

复制代码 代码如下:

10 = 20

延伸 · 阅读

精彩推荐
  • Golanggo日志系统logrus显示文件和行号的操作

    go日志系统logrus显示文件和行号的操作

    这篇文章主要介绍了go日志系统logrus显示文件和行号的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang如何使用struct的tag属性的详细介绍

    golang如何使用struct的tag属性的详细介绍

    这篇文章主要介绍了golang如何使用struct的tag属性的详细介绍,从例子说起,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看...

    Go语言中文网11352020-05-21
  • Golanggo语言制作端口扫描器

    go语言制作端口扫描器

    本文给大家分享的是使用go语言编写的TCP端口扫描器,可以选择IP范围,扫描的端口,以及多线程,有需要的小伙伴可以参考下。 ...

    脚本之家3642020-04-25
  • Golanggolang的httpserver优雅重启方法详解

    golang的httpserver优雅重启方法详解

    这篇文章主要给大家介绍了关于golang的httpserver优雅重启的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    helight2992020-05-14
  • Golanggolang 通过ssh代理连接mysql的操作

    golang 通过ssh代理连接mysql的操作

    这篇文章主要介绍了golang 通过ssh代理连接mysql的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    a165861639710342021-03-08
  • GolangGolang中Bit数组的实现方式

    Golang中Bit数组的实现方式

    这篇文章主要介绍了Golang中Bit数组的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    天易独尊11682021-06-09
  • GolangGolang通脉之数据类型详情

    Golang通脉之数据类型详情

    这篇文章主要介绍了Golang通脉之数据类型,在编程语言中标识符就是定义的具有某种意义的词,比如变量名、常量名、函数名等等,Go语言中标识符允许由...

    4272021-11-24