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

相关文章
|
10天前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
11天前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
11天前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
11天前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
27 3
|
12天前
|
SQL 安全 Java
阿里双十一背后的Go语言实践:百万QPS网关的设计与实现
解析阿里核心网关如何利用Go协程池、RingBuffer、零拷贝技术支撑亿级流量。 重点分享: ① 如何用gRPC拦截器实现熔断限流; ② Sync.Map在高并发读写中的取舍。
|
13天前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
26 0
|
15天前
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
125 7
【Go语言入门100题】026 I Love GPLT (5 分) Go语言 | Golang
L1-026 I Love GPLT (5 分) Go语言|Golang 这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。
622 0
|
存储 Go
【Go语言入门100题】023 输出GPLT (20 分) Go语言 | Golang
L1-023 输出GPLT (20 分) Go语言|Golang 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
188 0
|
16天前
|
存储 开发框架 Devops
eino — 基于go语言的大模型应用开发框架(一)
Eino 是一个受开源社区优秀LLM应用开发框架(如LangChain和LlamaIndex)启发的Go语言框架,强调简洁性、可扩展性和可靠性。它提供了易于复用的组件、强大的编排框架、简洁明了的API、最佳实践集合及实用的DevOps工具,支持快速构建和部署LLM应用。Eino不仅兼容多种模型库(如OpenAI、Ollama、Ark),还提供详细的官方文档和活跃的社区支持,便于开发者上手使用。
98 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等