go 面向对象 - structs 替代 classes
go 语言是面向对象的吗?
go不是纯面向对象的编程语言。 从go的常见问题解答获取的摘录回答了是否是面向对象的问题。
是也不是。 虽然go具有类型和方法,允许面向对象的编程风格,但没有类型的层次结构。
interface
的概念提供了一种不同的方法,我们相信易于使用,并且在某种程度上更加一般。 还有方法可以在其他类型中嵌入类型,以提供类似于但不相同的子类模式。 此外,go的方法比c 或java更常见:可以为任何类型的数据定义,甚至内置类型,例如普通的类型,unboxed
整数。 它们不限于structs(classes)。
在接下来的文章中,我们将讨论面向对象的编程概念,是如何使用go实现的。 与其他面向对象的语言(如java)相比,它们中的一些在实施中有很大差异。
使用 structs 代替 classes
go不提供 class,但它确实提供了 struct。 可以在结构体 上添加方法。 这提供了将数据和对数据进行操作的方法捆绑在一起的行为,类似于类。
让我们立即从一个例子开始,以便更好地理解。
我们将在这个例子中创建一个自定义包,因为它有助于更好地理解 struct 如何有效地替代 class。
在 src
中创建一个子文件夹并将其命名为 oop。
让我们初始化一个名为 oop 的 go 模块。 在 oop 目录中键入以下命令以创建一个名为 oop 的 go mod。
$ mkdir oop
$ cd oop
$ go mod init oop
在oop内创建一个子文件夹 employee。 在 employee 文件夹中,创建一个名为 employee.go 的文件。
文件夹结构看起来像
├── src
│ └── oop
│ ├── employee
│ │ └── employee.go
│ └── go.mod
请用以下内容替换employee.go的内容
employee.go
package employee import ( "fmt" ) type employee struct { firstname string lastname string totalleaves int leavestaken int } func (e employee) leavesremaining() { fmt.printf("%s %s has %d leaves remaining\n", e.firstname, e.lastname, (e.totalleaves - e.leavestaken)) }
在上面的程序中,第1行指定此文件属于 employee 包。第7行声明了一个 employee
结构体。第14行的 employee 结构体中添加了一个名为 leavesmaining
的方法。这将计算并显示员工的剩余假期数。现在我们有了一个结构体和一个方法,它在一个捆绑在一起的结构体上运行,类似于一个类。
在oop文件夹中创建一个名为main.go的文件。
现在文件夹结构看起来像
├── src
│ └── oop
│ ├── employee
│ │ └── employee.go
│ ├── go.mod
│ └── main.go
下面是 main.go 的内容。
main.go
package main import "oop/employee" func main() { e := employee.employee { firstname: "sam", lastname: "adolf", totalleaves: 30, leavestaken: 20, } e.leavesremaining() }
我们在第3行导入 employee 包。employee
结构体的leavesmaining()
方法是从main()
中的第12行调用的。
此程序无法在 playground 运行,因为它具有自定义包。如果在本地运行此程序,然后执行下面的命令
$ go install oop
程序将打印输出如下内容
sam adolf has 10 leaves remaining
上面就是go中使用结构体代替类,在 go 面向对象-new() 函数 替代 构造函数 这篇文章中来了解go中的构造函数。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
在 javascript 中验证 google recaptcha 第 2 版
发布时间:2024/03/23 浏览次数:193 分类:javascript
-
本文演示了如何在 javascript 中验证 google recaptcha。
c# 中的 goto 语句
发布时间:2024/02/02 浏览次数:184 分类:编程语言
-
本教程演示了如何在 c# 中使用 goto 以及何时使用它会有所帮助本教程将演示如何在 c# 中使用 goto 语法,并提供一些代码中的实际使用示例。
发布时间:2023/12/20 浏览次数:197 分类:python
-
本文为你提供了 python 中是否存在 goto 语句的答案。本文为你提供了 python 中是否存在 goto 语句的答案。基本上,python 不支持 goto 语句。
发布时间:2023/08/27 浏览次数:126 分类:c
-
this is a brief article about the difference between struct and typedef struct in c .这篇小文章将讨论 c 中的关键字 typedef。 我们还将讨论 c 中简单结构和 typedef 结构之间的区别。c/c 中的 typedef 关键字 type
避免 python中的 typeerror: input expected at most 1 argument, got 3 错误
发布时间:2023/07/08 浏览次数:671 分类:python
-
python 中避免 typeerror: input expected atmost 1 argument, got 3 error在python编程中,我们有两个内置方法来获取用户的输入:input(prompt)和 raw_input(prompt)。
使用 python 将文件上传到 google 云端硬盘
发布时间:2023/06/15 浏览次数:544 分类:python
-
本文将介绍我们如何使用 python 将文件上传到云盘,以 google drive 为例。 为此,我们将使用 google drive api。