侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Go  /  管理员 发布于 7年前   197

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)。在这里,有一些这样的转义序列代码的列表:

以下为例子来说明一些转义字符序列:
复制代码 代码如下:
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是区分大小写的。基于该基本类型在前面的章节中说明的那样,将有以下基本变量类型:

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


  • 上一条:
    Golang的循环中break和continue语句的用法讲解
    下一条:
    Golang的os标准库中常用函数的整理介绍
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客