百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

golang devops项目实战 - 变量和常量

toyiye 2024-06-27 01:05 12 浏览 0 评论

1. 变量的使用

1.1 什么是变量

在计算机中所有的指令都存在内存中,每块内存都会有一个地址,数据就存在

这些内存中,在计算机语言中,为了操作内存的方便性,可以给某块内存取一

个名字,通过名字去读取内存的值或者写某个值到内存中去,这个名字就是变

量,即variable,在go语言中用var表示这样的内存是一个变量。所以我们可以

认为变量就是一小块内存,用于存储数据,通过变量去改变和访问内存中的

值。

1.2 定义变量

Go语言里面定义变量有多种方式。

使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放

在变量名后面:

//定义一个名称为“variableName”,类型为"type"的变量,比如type 为int

var variableName type

定义多个变量

//定义三个类型都是“type”的变量

var num1, num2, num3 type

定义变量并初始化值

//初始化“variableName”的变量为“value”值,类型是“type”

var variableName type = value

同时初始化多个变量

/* 定义三个类型都是"type"的变量,并且分别初始化为相应的值 num1为v1,num2为

v2,num3为v3*/

var num1, num2, num3 type= v1, v2, v3

你是不是觉得上面这样的定义有点繁琐?没关系,因为Go语言的设计者也发现

了,有一种写法可以让它变得简单一点。我们可以直接忽略类型声明,那么上

面的代码变成这样了:

/* 定义三个变量,它们分别初始化为相应的值 num1为v1,num2为v2,num3为v3 然后

Go会根据其相应值的类型来帮你初始化它们*/

var num1, num2, num3 = v1, v2, v3

你觉得上面的还是有些繁琐?好吧,我也觉得。让我们继续简化:

/* 定义三个变量,它们分别初始化为相应的值 num1为v1,num2为v2,num3为v3 编译

器会根据初始化的值自动推导出相应的类型*/

num1, num2, num3 := v1, v2, v3

现在是不是看上去非常简洁了?:=这个符号直接取代了var和type,这种形式叫做

简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用

则会无法编译通过,所以一般用var方式来定义全局变量。

_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃。在这个例子中,

我们将值35赋予b,并同时丢弃34:

_, b := 34, 35

Go对于已声明但未使用的变量会在编译阶段报错,比如下面的代码就会产生一

个错误:声明了age但未使用。

/*

更多课程信息:

goland deveops 项目实战:https://ke.qq.com/course/422970?flowToken=1014088

Linux C/C++服务器/架构师课程:https://ke.qq.com/course/417774?flowToken=1010788

更多学习资料: C/C++架构师:762073882 ,Golang Deveops项目实战:148745800

*/

package main

import "fmt"

func main() {

num1, num2, num3 := 1, 2, 3

var age = 30

fmt.Printf("vaname1 is %d, num2 is %d, num3 is %d\n", num1, num2, num3)

}

2. 常量

所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变

该值。在Go程序中,常量可定义为数值、布尔值或字符串等类型。

它的语法如下:

const constantName type = value

//如果需要,也可以明确指定常量的类型:

const PI float32 = 3.1415926

下面是一些常量声明的例子:

const PI = 3.1415926

const i = 10000

const MaxThread = 10

const url = "www.0voice.com"

Go 常量和一般程序语言不同的是,可以指定相当多的小数位数(例如200位),

若指定给float32自动缩短为32bit,指定给float64自动缩短为64bit,详情参考链

3. 内置基础类型

Boolean

在Go中,布尔值的类型为bool,值是true或false,默认为false。

//示例代码

var isActive bool // 全局变量声明

var enabled, disabled = true, false // 忽略类型的声明

func test() {

var available bool // 一般声明

valid := false // 简短声明

available = true // 赋值操作

}

在C和C++中,bool类型的值用“0”值表示false,非“0”值表示true,那么

在Golang语言中,bool类型的变量只有true和false两个值,没有其它的值,比

如以下代码就是错误的

/*

更多课程信息:

goland deveops 项目实战:https://ke.qq.com/course/422970?flowToken=1014088

Linux C/C++服务器/架构师课程:https://ke.qq.com/course/417774?flowToken=1010788

更多学习资料: C/C++架构师:762073882 Golang Deveops项目实战:148745800

*/

package main

import "fmt"

func main() {

x := 100

var b bool = x

if x {

fmt.Printf("零声学院一切只为渴望更优秀的你")

}

}

编译的时候就出现了以下错误

src\hello\hello.go:14:6: cannot use x (type int) as type bool in assignment

src\hello\hello.go:16:2: non-bool x (type int) used as if condition

数值类型

数值类型:

uint8 the set of all unsigned 8-bit integers (0 to 255)

uint16 the set of all unsigned 16-bit integers (0 to 65535)

uint32 the set of all unsigned 32-bit integers (0 to 4294967295)

uint64 the set of all unsigned 64-bit integers (0 to

18446744073709551615)

int8 the set of all signed 8-bit integers (-128 to 127)

int16 the set of all signed 16-bit integers (-32768 to 32767)

int32 the set of all signed 32-bit integers (-2147483648 to 2147483647)

int64 the set of all signed 64-bit integers (-9223372036854775808 to

9223372036854775807)

float32 the set of all IEEE-754 32-bit floating-point numbers

float64 the set of all IEEE-754 64-bit floating-point numbers

complex64 the set of all complex numbers with float32 real and

imaginary parts

complex128 the set of all complex numbers with float64 real and

imaginary parts

byte alias for uint8

rune alias for int32

uint either 32 or 64 bits

int same size as uint

uintptr an unsigned integer large enough to store the uninterpreted bits

of a pointer value

【注意一】不同类型间不允许操作

需要注意的是,这些类型的变量之间不允许互相赋值或者操作,不然再编译时

会引起编译错误:

例如下面这段代码会出现:invalid operation: a + b (mismatched types int8

and int32)

/*

更多课程信息:

goland deveops 项目实战: https://ke.qq.com/course/422970?flowToken=1014088

Linux C/C++服务器/架构师课程:https://ke.qq.com/course/417774?flowToken=1010788

更多学习资料: C/C++架构师:783153655 Golang Deveops项目实战:148745800

*/

package main

import "fmt"

func main() {

var a int8 = 20

var b uint32 = 35

c := a + b

fmt.Printf("欢迎来到零声学院")

}

当然我们可以采用显示转换的方式去强制转换,比如下面这种方式:

package main

import (

"fmt"

"reflect"

)

func main() {

var a byte = 20

var b uint32 = 35

c := uint32(a) + b

fmt.Println(c)

fmt.Println(reflect.TypeOf(a))

fmt.Println(reflect.TypeOf(c))

}

数值类型中看到有两个别名,byte和rune,这两个别名分别是unit8和int32的

别名,上文中我们提到了变量a 和 b之间不能相加赋值为c,但是如果是别名和

对应的类型之间是可以转换的。

/*

更多课程信息:

goland deveops 项目实战: https://ke.qq.com/course/422970?flowToken=1014088

C/C++服务器/架构师课程:https://ke.qq.com/course/417774?flowToken=1010788

更多学习资料: C/C++架构师:762073882 Golang Deveops项目实战:148745800

*/

package main

import (

"fmt"

"reflect"

)func main() {

var a int32 = 20

var b rune = 35

c := a + b

fmt.Println(c)

fmt.Println(reflect.TypeOf(c))

}

【注意二】我们看到数值部分有个叫做uintptr类型,这个uintptr就是保存了一

个指针的地址值的类型,它默认就是64位的,类似于C语言的 void *,即保存指

针用的

浮点数的类型有float32和float64两种(没有float类型),默认是float64。

这就是全部吗?No!Go还支持复数。它的默认类型是complex128(64位实数

+64位虚数)。如果需要小一些的,也有complex64(32位实数+32位虚数)。复数

的形式为RE + IMi,其中RE是实数部分,IM是虚数部分,而最后的i是虚数单

位。下面是一个使用复数的例子:

var c complex64 = 32+5i

//output: (5+5i)

fmt.Println(c)

【注意三】当然golang里不止数值类型和boolean,除了这个实际上还有

array、slice、struct、string interface chan map 等等,这些会在后面的课程

涉及到,详情见: https://golang.org/ref/spec#Types

如果大家在学习过程中有什么疑问,可以进群讨论(148745800

golang devops项目实战 - 变量和常量视频教程

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码