”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解 Go 中的包和模块!

了解 Go 中的包和模块!

发布于2024-11-06
浏览:783

Entendendo pacotes e modulos em Go!


解开 Go 中的包和模块:我一开始不明白的地方

当我开始用 Go 编程时,我已经在 C 方面打下了良好的基础,这是我的第一门编程语言。这对我帮助很大,因为 Go 与 C 有很多共同点——从简单性到性能。更少的关键字、更低的复杂性以及更平滑的学习曲线。但接下来的部分让我有点迷失:包、模块和 go mod.

之类的东西

我记得我在想:“我只想编译一个简单的程序,为什么我需要担心包?”那么模块呢?它们似乎凭空出现,每个人都说它们对于管理依赖关系至关重要。但别担心,我会以简单的方式为那些已经编程但尚未掌握 Go 中这些内容的人解释所有内容。

Go 中的包:划分和组织代码

首先,Go 中包的概念与您在 C 中看到的非常相似。将包视为组织和重用代码的一种方式。在 C 中,当您将函数分成 .h 和 .c 文件时,在 Go 中您会执行类似的操作,但使用包。每个包都对功能进行分组,并允许您导入代码其他部分所需的内容。

例如,您可以将它们分成包,而不是将所有函数都放入一个文件中:

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}

这里,fmt 是一个标准库包,负责 I/O 格式化。导入时,您可以访问其功能。并且您可以用同样的方式创建自己的包,使代码维护和组织更容易。

那么 go 模组呢?

现在,模块部分。这就是事情变得有趣的地方。如果包就像 C 中的库,那么模块就像管理所有这些的“超级包”。它们允许您的项目以有组织且安全的方式轻松下载和使用第三方软件包。

go mod 是帮助您配置项目以使用这些模块的命令。当您使用 go mod init 启动一个新项目时,您实际上是在创建一个 Go 将用来管理依赖项的配置。这意味着它将自动下载您的项目所需的包(无需像在 C 中那样手动下载)。

例如:

go mod init meu-projeto
go get github.com/pacote/fantastico

通过这些命令,Go 创建 go.mod 文件,该文件存储有关项目依赖项的信息。然后,当您运行 go build 时,Go 会直接从互联网下载编译所需的所有内容,而您无需担心。

简而言之...

当您将代码组织到包中并使用模块来管理依赖项时,Go 会变得更加高效。一开始它可能看起来令人困惑(我也没有立即理解它),但是一旦掌握了它,您就会意识到包和模块使您的代码更具可扩展性和更简洁。一切都进展得更好,尤其是在大型项目中。


版本声明 本文转载于:https://dev.to/nivicius/entendendo-pacotes-e-modulos-em-go-2k3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 项目通过其接口引用对象
    项目通过其接口引用对象
    接口作为引用类型的偏好: 如果存在合适的接口,您应该通过它引用对象而不是具体的类。 这适用于参数、返回值、变量和字段。 使用接口的灵活性: 使用接口允许您更改实现而不影响代码。 示例:从 LinkedHashSet 更改为 HashSet 或 TreeSet,只需更改构造函数即可。 何时不使用接口:...
    编程 发布于2024-11-06
  • 如何防止游戏网站页面加载时重复插入?
    如何防止游戏网站页面加载时重复插入?
    调试页面加载时的重复插入在游戏网页上,观察到用户活动查询在页面刷新时将重复记录插入数据库。$insert_user_activity = mysql_query("INSERT INTO game_activity (user_id,user_full_name,game_id,game_...
    编程 发布于2024-11-06
  • Python 最佳实践:编写干净、高效且可维护的代码
    Python 最佳实践:编写干净、高效且可维护的代码
    Python 因其简单性、可读性和多功能性而成为最流行的编程语言之一。 无论您是经验丰富的开发人员还是初学者,遵循 Python 最佳实践对于编写干净、高效和可维护的代码至关重要。 在这篇博文中,我们将探讨编写 Python 代码时要牢记的一些关键最佳实践。 1 - 遵守 PEP...
    编程 发布于2024-11-06
  • std::lock_guard 与 std::scoped_lock:何时使用哪个锁?
    std::lock_guard 与 std::scoped_lock:何时使用哪个锁?
    std::lock_guard 与 std::scoped_lock:为任务选择正确的锁随着 C 17 的引入,std ::scoped_lock 类与现有的 std::lock_guard 一起出现,引发了关于它们之间的差异以及何时使用它们的问题。虽然 std::scoped_lock 与 std...
    编程 发布于2024-11-06
  • WebRTC简介
    WebRTC简介
    安装和代码指南 WebRTC(网络实时通信)是一种开源技术,可通过网络浏览器和移动应用程序中的简单 API 实现实时通信。它允许在点之间直接共享音频、视频和数据,无需中间服务器,非常适合视频会议、直播和文件共享等应用。 在本博客中,我们将深入探讨以下主题: 什么是WebRTC? W...
    编程 发布于2024-11-06
  • 如何在不使用 JavaScript 的情况下使用 CSS 隐藏和显示内容?
    如何在不使用 JavaScript 的情况下使用 CSS 隐藏和显示内容?
    使用 CSS 隐藏和显示内容:无需 JavaScript 的技巧在进行 Web 开发时,控制内容的可见性通常至关重要。传统上,这是使用 JavaScript 实现的,但 CSS 也可用于创建优雅的隐藏和显示效果。下面描述了一种此类技术,解决了先前方法遇到的特定挑战。隐藏/显示内容切换:可以使用 CS...
    编程 发布于2024-11-06
  • 如何创建重复最少的 5 个字符的随机字符串?
    如何创建重复最少的 5 个字符的随机字符串?
    生成 5 个具有最少重复的随机字符要创建具有最少重复的随机 5 个字符字符串,最有效的方法之一是使用PHP 函数和巧妙技术的结合。让我们深入研究解决方案:使用 md5 和 rand$rand = substr(md5(microtime()),rand(0,26),5);该方法使用md5哈希函数根据...
    编程 发布于2024-11-06
  • 如何在 Go 中处理不同包之间相同的方法签名?
    如何在 Go 中处理不同包之间相同的方法签名?
    处理不同包中具有相同方法签名的接口在Go中,当处理具有相同方法签名但定义在不同包中的多个接口时,可能会出现以下情况实现两个接口的类型会导致意外行为。考虑在不同包中定义的这两个接口(Doer)和函数(FuncA 和 FuncB):// Package A type Doer interface { D...
    编程 发布于2024-11-06
  • 如何使用 jQuery 填充级联下拉列表以获得更好的兼容性和用户体验?
    如何使用 jQuery 填充级联下拉列表以获得更好的兼容性和用户体验?
    使用 jQuery 填充级联下拉列表在表单开发领域,级联下拉列表经常用于提供更加用户友好和动态体验。为了增强兼容性并解决跨浏览器问题,jQuery 提供了一个强大的解决方案来异步填充这些下拉列表。问题中所示的用于创建级联下拉列表的原始 JavaScript 函数缺乏与 IE 的兼容性。为了解决这个问...
    编程 发布于2024-11-06
  • 了解 JavaScript 中的扩展运算符:初学者简单指南
    了解 JavaScript 中的扩展运算符:初学者简单指南
    介绍 JavaScript 是一种有趣的编程语言,其最令人兴奋的功能之一是扩展运算符。如果您刚刚开始编码,或者即使您是一个对学习 JavaScript 感兴趣的孩子,也不必担心!我将以最简单的方式分解这个概念,并举例来帮助您理解。 什么是价差运算符? 扩展运算符看起...
    编程 发布于2024-11-06
  • 在 Python 中使用 OpenSearch 掌握 CRUD 操作:实用指南
    在 Python 中使用 OpenSearch 掌握 CRUD 操作:实用指南
    OpenSearch, an open-source alternative to Elasticsearch, is a powerful search and analytics engine built to handle large datasets with ease. In this b...
    编程 发布于2024-11-06
  • 冰沙框架的重要概念||如何精通冰沙
    冰沙框架的重要概念||如何精通冰沙
    要精通 Frappe,有几个关键概念和领域需要关注。以下是最重要的细分: 1. 文档类型 定义:DocTypes是Frappe中的核心数据模型。每个实体或记录都存储在 DocType 中,并且它们可以具有字段、权限和工作流程。 为什么它很重要:了解如何创建和自定义 DocType 至...
    编程 发布于2024-11-06
  • 如何解决 JLabel 拖放的鼠标事件冲突?
    如何解决 JLabel 拖放的鼠标事件冲突?
    用于拖放的 JLabel 鼠标事件:解决鼠标事件冲突为了在 JLabel 上启用拖放功能,鼠标事件必须被覆盖。然而,当尝试使用 mousePressed 事件实现拖放时,会出现一个常见问题,因为 mouseReleased 事件对该 JLabel 无效。提供的代码在 mousePressed 事件中...
    编程 发布于2024-11-06
  • MySQL 中的数据库分片:综合指南
    MySQL 中的数据库分片:综合指南
    随着数据库变得越来越大、越来越复杂,有效地控制性能和扩展就出现了。数据库分片是用于克服这些障碍的一种方法。称为“分片”的数据库分区将大型数据库划分为更小、更易于管理的段(称为“分片”)。通过将每个分片分布在多个服务器上(每个服务器保存总数据的一小部分),可以提高可扩展性和吞吐量。 在本文中,我们将探...
    编程 发布于2024-11-06
  • 如何将 Python 日期时间对象转换为秒?
    如何将 Python 日期时间对象转换为秒?
    在 Python 中将日期时间对象转换为秒在 Python 中使用日期时间对象时,通常需要将它们转换为秒以适应各种情况分析目的。但是,toordinal() 方法可能无法提供所需的输出,因为它仅区分具有不同日期的日期。要准确地将日期时间对象转换为秒,特别是对于 1970 年 1 月 1 日的特定日期...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3