跳转到主要内容

【Go语言开发】理解 Go 中的数据类型

介绍


数据类型指定在编写程序时特定变量将存储的值的种类。数据类型还决定了可以对数据执行哪些操作。

在本文中,我们将介绍 Go 原生的重要数据类型。这不是对数据类型的详尽调查,但会帮助您熟悉 Go 中可用的选项。了解一些基本数据类型将使您能够编写更清晰、高效执行的代码。

背景


考虑数据类型的一种方法是考虑我们在现实世界中使用的不同类型的数据。现实世界中的数据示例是数字:例如,我们可以使用整数(0、1、2、...)、整数(...、-1、0、1、...)和无理数(π)。

通常,在数学中,我们可以组合不同类型的数字,并得到某种答案。我们可能想在 π 上加 5,例如:

5 + π


我们可以保留等式作为解决无理数的答案,或者将 π 舍入为一个小数位数缩写的数字,然后将这些数字相加:

5 + π = 5 + 3.14 = 8.14


但是,如果我们开始尝试用另一种数据类型(例如单词)来评估数字,事情就变得不那么有意义了。我们将如何求解以下方程?

【Go语言开发】在 Go 中使用字符串的介绍

在 Go 中使用字符串的介绍


字符串是一个或多个字符(字母、数字、符号)的序列,可以是常量或变量。由 Unicode 组成的字符串是不可变的序列,这意味着它们是不变的。

因为文本是我们在日常生活中使用的一种常见的数据形式,所以字符串数据类型是编程的一个非常重要的构建块。

本 Go 教程将介绍如何创建和打印字符串、如何连接和复制字符串以及如何将字符串存储在变量中。

字符串文字


在 Go 中,字符串存在于反引号 `(有时称为反引号)或双引号内。根据您使用的引号,字符串将具有不同的特征。

使用反引号,如` ```bar``` `,将创建一个原始字符串文字。在原始字符串文字中,任何字符都可以出现在引号之间,反引号除外。这是一个原始字符串文字的示例:

`Say "hello" to Go!`


反斜杠在原始字符串文字中没有特殊含义。例如,\n 将显示为实际字符、反斜杠 \ 和字母 n。与解释的字符串文字不同,其中 \n 将插入一个实际的新行。

原始字符串文字也可用于创建多行字符串:

【Go语言开发】如何在 Go 中格式化字符串

由于字符串通常由书面文本组成,因此在许多情况下,我们可能希望通过标点符号、换行符和缩进更好地控制字符串的外观,以使它们对人类更具可读性。

在本教程中,我们将介绍一些使用 Go 字符串的方法,以确保所有输出文本的格式正确。

字符串文字


让我们首先区分字符串文字和字符串值。字符串文字是我们在计算机程序的源代码中看到的,包括引号。当我们调用 fmt.Println 函数并运行程序时,我们会看到一个字符串值。

在“你好,世界!”程序,字符串文字是“你好,世界!”而字符串值为 Hello, World!不带引号。字符串值是我们在运行 Go 程序时在终端窗口中看到的输出。

但是某些字符串值可能需要包含引号,例如当我们引用源时。因为字符串字面量和字符串值不等价,所以通常需要为字符串字面量添加额外的格式,以确保字符串值按照我们想要的方式显示。

引号


因为我们可以在 Go 中使用反引号 (`) 或双引号 ("),所以通过在由反引号括起来的字符串中使用双引号来在字符串中嵌入引号很简单:

`Sammy says, "Hello!"`


或者,要使用反引号,您可以将字符串括在双引号中:

【Go语言基础】Go 中的 Strings 包简介

介绍


Go 的字符串包有几个函数可用于处理字符串数据类型。这些函数让我们可以轻松地修改和操作字符串。我们可以将函数视为我们对代码元素执行的操作。内置函数是那些在 Go 编程语言中定义并且可供我们随时使用的函数。

在本教程中,我们将回顾几个可用于在 Go 中处理字符串的不同函数。

使字符串大写和小写


函数 strings.ToUpper 和 strings.ToLower 将返回一个字符串,其中原始字符串的所有字母都转换为大写或小写字母。因为字符串是不可变的数据类型,所以返回的字符串将是一个新字符串。字符串中的任何非字母字符都不会更改。

要将字符串“Sammy Shark”全部转换为大写,您可以使用 strings.ToUpper 函数:

ss := "Sammy Shark"
fmt.Println(strings.ToUpper(ss))

Output
SAMMY SHARK


要转换为小写:

fmt.Println(strings.ToLower(ss))

Output
sammy shark

【Go语言开发】如何在 Go 中定义和调用函数

介绍


函数是一段代码,一旦定义,就可以重用。函数用于通过将代码分解为可在整个程序中多次使用的小型、可理解的任务来使您的代码更易于理解。

Go 附带了一个强大的标准库,其中包含许多预定义的函数。您可能已经从 fmt 包中熟悉的是:

  • fmt.Println() 会将对象打印到标准输出(很可能是您的终端)。
  • fmt.Printf() 这将允许您格式化打印输出。

函数名称包括括号,并且可能包括参数。

在本教程中,我们将介绍如何定义您自己的函数以在您的编码项目中使用。

定义函数


让我们从经典的“Hello, World!”开始。程序化成一个函数。

我们将在我们选择的文本编辑器中创建一个新的文本文件,并调用程序 hello.go。然后,我们将定义函数。

函数是使用 func 关键字定义的。然后是您选择的名称和一组括号,其中包含函数将采用的任何参数(它们可以为空)。函数代码行用大括号 {} 括起来。

在这种情况下,我们将定义一个名为 hello() 的函数:

hello.go

【Go语言开发】如何在 Go 中使用可变参数函数

介绍


可变参数函数是接受零、一个或多个值作为单个参数的函数。 虽然可变参数函数并不常见,但它们可用于使您的代码更清晰、更具可读性。

可变参数函数比看起来更常见。 最常见的是 fmt 包中的 Println 函数。

func Println(a ...interface{}) (n int, err error)


带有以一组省略号 (...) 开头的参数的函数被视为可变参数函数。 省略号表示提供的参数可以是零、一个或多个值。 对于 fmt.Println 包,它声明参数 a 是可变参数。

让我们创建一个使用 fmt.Println 函数并传入零个、一个或多个值的程序:

print.go

【Go语言高级开发】使用构建标签的自定义 Go 二进制文件

介绍


在 Go 中,构建标记或构建约束是添加到一段代码的标识符,用于确定在构建过程中何时应将文件包含在包中。这允许您从相同的源代码构建不同版本的 Go 应用程序,并以快速且有条理的方式在它们之间切换。许多开发人员使用构建标签来改进构建跨平台兼容应用程序的工作流程,例如需要更改代码以解决不同操作系统之间差异的程序。构建标签还用于集成测试,允许您在集成代码和带有模拟服务或存根的代码之间快速切换,以及应用程序中不同级别的功能集。

让我们以不同客户功能集的问题为例。在编写某些应用程序时,您可能希望控制在二进制文件中包含哪些功能,例如提供 Free、Pro 和 Enterprise 级别的应用程序。随着客户在这些应用程序中提高订阅级别,更多功能将解锁并可用。要解决此问题,您可以维护单独的项目并尝试通过使用 import 语句使它们彼此同步。虽然这种方法可行,但随着时间的推移,它会变得乏味且容易出错。另一种方法是使用构建标签。

在本文中,您将使用 Go 中的构建标签生成不同的可执行二进制文件,这些二进制文件提供示例应用程序的免费、专业和企业功能集。每个都有一组不同的可用功能,免费版本是默认设置。

先决条件


要遵循本文中的示例,您将需要:

【Go语言开发】在 Go 中定义方法

介绍


函数允许您将逻辑组织成可重复的过程,每次运行时可以使用不同的参数。 在定义函数的过程中,您经常会发现多个函数每次都可能对同一条数据进行操作。 Go 识别这种模式并允许您定义称为方法的特殊函数,其目的是对某种特定类型的实例进行操作,称为接收器。 向类型添加方法使您不仅可以传达数据是什么,还可以传达应该如何使用该数据。

定义一个方法


定义方法的语法类似于定义函数的语法。 唯一的区别是在 func 关键字之后添加了一个额外的参数,用于指定方法的接收者。 接收者是您希望在其上定义方法的类型的声明。 以下示例在结构类型上定义了一个方法:

【Go语言基础】如何构建和安装 Go 程序

介绍


到目前为止,在我们的如何在 Go 中编码系列中,您已经使用命令 go run 来自动编译您的源代码并运行生成的可执行文件。尽管此命令对于在命令行上测试您的代码很有用,但分发或部署您的应用程序需要您将代码构建为可共享的二进制可执行文件,或包含可以运行您的应用程序的机器字节代码的单个文件。为此,您可以使用 Go 工具链来构建和安装您的程序。

在 Go 中,将源代码转换为二进制可执行文件的过程称为构建。构建此可执行文件后,它将不仅包含您的应用程序,还包含在目标平台上执行二进制文件所需的所有支持代码。这意味着 Go 二进制文件不需要系统依赖项(例如 Go 工具)在新系统上运行。将这些可执行文件放在您自己系统上的可执行文件路径中将允许您从系统上的任何位置运行该程序。这与将程序安装到系统上是一样的。

在本教程中,您将使用 Go 工具链来运行、构建和安装示例 Hello, World!程序,允许您有效地使用、分发和部署未来的应用程序。

先决条件


要遵循本文中的示例,您将需要:

【Go语言开发】如何在 Go 中使用接口

介绍


编写灵活、可重用和模块化的代码对于开发通用程序至关重要。以这种方式工作可以避免在多个地方进行相同的更改,从而确保代码更易于维护。你如何做到这一点因语言而异。例如,继承是 Java、C++、C# 等语言中使用的一种常见方法。

开发人员也可以通过组合实现相同的设计目标。组合是一种将对象或数据类型组合成更复杂的类型的方法。这是 Go 用来促进代码重用、模块化和灵活性的方法。 Go 中的接口提供了一种组织复杂组合的方法,学习如何使用它们将使您能够创建通用的、可重用的代码。

在本文中,我们将学习如何组合具有共同行为的自定义类型,这将允许我们重用我们的代码。我们还将学习如何为我们自己的自定义类型实现接口,以满足从另一个包定义的接口。

定义行为


组合的核心实现之一是接口的使用。接口定义了一种类型的行为。 Go 标准库中最常用的接口之一是 fmt.Stringer 接口: