Go 语言入门很简单 -- 2. Go 的数据类型 #私藏项目实操分享#

简介: Go 语言入门很简单 -- 2. Go 的数据类型 #私藏项目实操分享#

数字类型

Go 有几种不同的类型来表示数字。 通常我们将数字分为两种不同的类型:整数和浮点数。

整型

整数——就像它们的数学对应物——是没有小数部分的数字。  (..., -3, -2, -1,0, 1, ...) 与我们用来表示数字的基数为 10 的十进制系统不同,计算机使用基数为 2  的二进制系统。我们的系统由 10 个不同的数字组成。 一旦我们用尽了可用的数字,我们就通过使用 2 个(然后是 3、4、5  ……)个彼此相邻的数字来表示更大的数字。 例如9后的数字是10,99后的数字是100等等。 计算机也这样做,但它们只有 2 位数字而不是  10。所以计数看起来像这样:0、1、10、11、100、101、110、111 等等。  

我们使用的数字系统与一台计算机使用的数字系统之间的另一个区别是所有整数类型都有一个确定的大小。  他们只有一定数量的数字的空间。 所以一个 4 位整数可能看起来像这样:0000, 0001, 0010, 0011,  0100。最终我们用完了空间,大多数计算机只是回到开头。

Go  的整数类型有:uint8、uint16、uint32、uint64、int8、int16、int32 和 int64。 8、16、32 和  64 告诉我们每种类型使用多少位。  uint 表示“无符号整数”,而 int 表示“有符号整数”。  无符号整数只包含正数(或零)。  另外还有两种别名类型:与uint8相同的byte和与int32相同的rune。  字节是计算机上使用的极其常见的度量单位(1 字节 = 8 位,1024 字节 = 1 KB,1024 KB = 1 兆字节,……)因此 Go  的字节数据类型经常用于其他类型的定义。 还有 3 种依赖于机器的整数类型:uint、int 和 uintptr。  它们依赖于机器,因为它们的大小取决于您使用的架构类型。 通常,如果您使用整数,您应该只使用 int 类型。

浮点型

浮点数是包含小数部分(实数)的数字。 (1.234, 123.4, 0.00001234, 12340000) 它们在计算机上的实际表示相当复杂,并不是真正需要知道如何使用它们。 所以现在我们只需要记住以下几点:

  1. 浮点数是不精确的。 有时无法表示一个数字。 例如,计算 1.01 - 0.99 会得到 0.020000000000000018——一个非常接近我们预期的数字,但并不完全相同。
  2. 像整数一样,浮点数也有一定的大小(32 位或 64 位)。 使用更大的浮点数会增加它的精度。 (它可以代表多少位数)
  3. 除了数字之外,还有其他几个可以表示的值:“非数字”(NaN,对于 0/0 之类的东西)以及正无穷大和负无穷大。 (+∞ 和 −∞)

Go 有两种浮点类型:float32 和 float64(通常也分别称为单精度和双精度)以及两种用于表示复数(带虚部的数字)的附加类型:complex64 和 complex128。 通常我们在处理浮点数时应该坚持使用 float64。

例子

package main
import (
    "fmt"
)
func main() {
    a := 3
    b := 4
    fmt.Println("1 + 1 =", 1+1)
    fmt.Println("a + b =", a+b)
    fmt.Println("1.0 + 1.0 =", 1.0+1.0)
}

输出结果为:

1 + 1 = 2
a + b = 7
1.0 + 1.0 = 2

和第一个Hello  World程序一样,它包含相同的package main行、相同的 import 行、相同的函数声明并使用相同的 Println 函数。  这次不是打印字符串 Hello World,而是打印字符串 1 + 1 = 后跟表达式 1 + 1 的结果。该表达式由三部分组成:数字文字  1(类型为 int)、 + 运算符(表示加法)和另一个数字文字 1。让我们使用浮点数尝试相同的操作:请注意,我们使用 .0 来告诉 Go  这是一个浮点数而不是整数。 运行这个程序会给你和以前一样的结果。 除了 + 法 之外还有其他几个操作符:

  • 加 \+
  • 减  \-
  • 乘 \*
  • 除 /
  • 取余 %

字符串类型

正如我们在前文中看到的,字符串是用于表示文本的具有确定长度的字符序列。 Go 字符串由单个字节组成,通常每个字符一个。 (中文等其他语言的字符用一个以上的字节表示)可以使用双引号 "Hello World"创建字符串文字。 它们之间的区别在于双引号字符串不能包含换行符,并且它们允许特殊的转义序列。 例如,\n 被换行符替换,\t 被替换为制表符。对字符串的几种常见操作包括查找字符串的长度:

len("Hello World"),访问字符串中的单个字符:"Hello World"[1],以及将两个字符串连接在一起:"Hello " + "World" . 让我们修改我们之前创建的程序来测试这些:

package main
import "fmt"
func main() {
    fmt.Println(len("Hello World"))
    fmt.Println("Hello World"[1])
    fmt.Println("Hello" + "World")
}

输出结果为:

11
101
HelloWorld

解释:

  1. 空格也被认为是一个字符,所以字符串的长度是 11 而不是 10,并且第三行有“Hello”而不是“Hello”。
  2. 字符串从  0 开始“索引”而不是 1。 [1] 给你第二个元素而不是第一个。 另请注意,当您运行此程序时,您看到的是 101 而不是 e。  这是因为字符由一个字节表示(记住一个字节是一个整数)。考虑索引的一种方法是将其显示为:“Hello World”1。 您可以将其读作“字符串  Hello World sub 1”、“字符串 Hello World at 1”或“字符串 Hello World 的第二个字符”。
  3. 连接使用与加法相同的符号。Go 编译器根据参数的类型计算出要做什么。 由于 + 的两侧都是字符串,因此编译器假定您的意思是连接而不是加法。 (加法对字符串没有意义)

布尔型

布尔值(以 George Boole 命名)是一种特殊的 1 位整数类型,用于表示真假(或开和关)。 三个逻辑运算符与布尔值一起使用:

  • && - and
  • || - or
  • ! - not

常见的真值表如下:

表达式

结果

true && true

true

true && false

false

false && true

false

false && false

false

true || true

true

true || false

true

false || true

true

flase || false

false

!true

false

!false

true

代码验证如下:

package main
import "fmt"
func main() {
    fmt.Println(true && true)
    fmt.Println(true && false)
    fmt.Println(true || true)
    fmt.Println(true || false)
    fmt.Println(!true)
}
true
false
true
true
false

相关文章
|
8天前
|
存储 Go
Go 语言入门指南:切片
Golang中的切片(Slice)是基于数组的动态序列,支持变长操作。它由指针、长度和容量三部分组成,底层引用一个连续的数组片段。切片提供灵活的增减元素功能,语法形式为`[]T`,其中T为元素类型。相比固定长度的数组,切片更常用,允许动态调整大小,并且多个切片可以共享同一底层数组。通过内置的`make`函数可创建指定长度和容量的切片。需要注意的是,切片不能直接比较,只能与`nil`比较,且空切片的长度为0。
Go 语言入门指南:切片
|
24天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
37 15
|
4月前
|
存储 设计模式 安全
Go语言中的并发编程:从入门到精通###
本文深入探讨了Go语言中并发编程的核心概念与实践技巧,旨在帮助读者从理论到实战全面掌握Go的并发机制。不同于传统的技术文章摘要,本部分将通过一系列生动的案例和代码示例,直观展示Go语言如何优雅地处理并发任务,提升程序性能与响应速度。无论你是Go语言初学者还是有一定经验的开发者,都能在本文中找到实用的知识与灵感。 ###
|
10月前
|
编译器 Go C语言
go语言基本数据类型和变量
go语言基本数据类型和变量
61 0
|
Go 存储
02-Go语言数据类型与变量
Go基本类型 布尔型: bool - 长度: 1字节 - 取值范围: true,false - 注意事项: 不可以用数字代表true或false 整型: int/uint - 根据运行平台可能为32或64 8位整型:int8/uint8 - 长度: 1字节 - 取值范围: -128~127/0-25...
935 0
|
Go Java
Golang数据类型和变量
数据类型 先来介绍一下Golang的数据类型。 布尔型 bool类型代表逻辑值,有真值true和假值false两种取值。 整数类型 整数类型有如下几种,这些整数都是有符号的类型,它们的无符号版本是类型名前面添加u,例如uint32。
779 0
|
3天前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
4天前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
12天前
|
算法 安全 Go
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
本文探讨了如何利用 Go 语言中的 Bloom Filter 算法提升公司局域网管理系统的性能。Bloom Filter 是一种高效的空间节省型数据结构,适用于快速判断元素是否存在于集合中。文中通过具体代码示例展示了如何在 Go 中实现 Bloom Filter,并应用于局域网的 IP 访问控制,显著提高系统响应速度和安全性。随着网络规模扩大和技术进步,持续优化算法和结合其他安全技术将是企业维持网络竞争力的关键。
26 2
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
|
4天前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
22 3

热门文章

最新文章