iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解Go语言的模块化
  • 880
分享到

如何理解Go语言的模块化

2023-06-15 15:06:24 880人浏览 泡泡鱼
摘要

本篇内容介绍了“如何理解Go语言的模块化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!环境变量学习 go 语言的第一步,当然是安装以及环境变

本篇内容介绍了“如何理解Go语言的模块化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

环境变量

学习 go 语言的第一步,当然是安装以及环境变量。由于我是 Macos,直接运行 brew install go  就能安装成功,也可以在官网(https://golang.google.cn/)下载对应的二进制包。

安装成功后,需要配置下面几个环境变量:

  • GOROOT:go 语言的安装路径;

  • GOBIN:go 语言的可执行文件路径,一般为 "$GOROOT/bin";

  • GOPATH:工作目录,可设置多个,每个项目都可以设置一个单独的GOPATH;

GOPATH

在 GoLand(go 语言最强IDE) 中,我们可以在 Preferences 中设置多个 GOPATH,而且将 GOPATH  分为全局和局部的。

如何理解Go语言的模块化

GOPATH 最早出现的意义是用来进行模块管理,每个 GOPATH 中会有三个目录:

  • src:用来存放源代码;

  • pkg:用来存放编译后的 .a(arcHive) 静态库文件;

  • bin:用来存放编译后可直接运行的二进制文件;

如何理解Go语言的模块化

一般设置为工作目录的 src 文件夹需要手动创建,其他两个目录都是编译后自动生成的。

接下来,我们新建了一个目录 ~/Code/goland/go-story,并将该目录设置为工作目录。

export GOPATH="~/Code/goland/go-story"

然后在当前目录新建一个 src 文件夹,并新建一个 hello 目录,在 hello 目录新建 main.go 文件。

如何理解Go语言的模块化

在 hello/main.go 文件中,写入如下代码:

package main  import (  "flag"  "fmt" )  var name string  func init() {  flag.StringVar(&name, "name", "everyone", "The greeting object.") }  func main() {  flag.Parse() // 解析命令行参数  fmt.Printf("\nHello %s\n", name) }

flag 库是 go 内置的模块,类似于 node 的 commander 库,运行后结果如下所示:

如何理解Go语言的模块化

下面我们引入一个能够让命令行输出色彩更加丰富的库:colourize,类似于 node 中的 chalk。通过下面这个命令来安装依赖:

go get GitHub.com/TreyBastian/colourize

运行之后,我们可以看到在工作区自动创建了一个 pkg 目录,目录下新生成的是 colourize 库文件,同时 src 目录也新建了一个 github.com 目录,用来放 colourize 的源码

如何理解Go语言的模块化

go get 命令可以简单理解为 npm install。接下来就能在 hello/main.go 中引入依赖。

package main  import (  "flag"  "fmt"   "github.com/TreyBastian/colourize" )  var name string  func init() {  flag.StringVar(&name, "name", "everyone", "The greeting object.") }  func hello(name string) {  fmt.Printf(colourize.Colourize("\nHello %s\n", colourize.Blue), name) }  func main() {  flag.Parse()  hello(name) }

运行 hello/main.go 可以看到命令行输出了蓝色的文字。

如何理解Go语言的模块化

默认情况下,go 依赖的加载机制为:

  • $GOROOT 下的 src 目录

  • $GOPATH 下的 src 目录

Go Vendor

前面这种方式,有个很麻烦的问题,就是没有办法进行很好的版本管理,而且多个依赖分散在 $GOPATH/src  目录下,可能会出现很多很麻烦的问题。

例如,我现在在 GOPATH 下有两个项目:go-blog、go-stroy,这两个项目分别有不同的依赖,分散在 github.com  目录,这个时候到底要不要将整个 github.com 目录添加到版本库呢?

如何理解Go语言的模块化

go 在 1.5 版本的时候,引入了 vendor 机制,在每个项目目录下可以通过 vendor 目录存放依赖,这类似于 node 中的 node_modules 目录。

如何理解Go语言的模块化

使用 go vendor 需要先安装 govendor 模块。

go get govendor

然后在项目目录运行如下命令。

cd ~/Code/gland/go-story/src/hello govendor init govendor add github.com/TreyBastian/colourize

可以看到,hello 项目下新生成了一个 vendor 目录,而且 colourize 也被拷贝到了该目录下。

如何理解Go语言的模块化

而且 govendor 会新建一个 vendor.JSON 文件,用来进行依赖项的管理。

如何理解Go语言的模块化

有了 go vendor 之后,依赖项的加载顺序如下:

  • 项目目录下的 vendor 目录

  • 项目目录上一级的 vendor 目录

  • 不断向上冒泡 ……(PS. 类似于 node_modules)

  • $GOPATH 下的 vendor 目录

  • $GOROOT 下的 src 目录

  • $GOPATH 下的 src 目录

配置开关

有一点需要注意,在 go 1.5 版本下,go vendor 并不是默认开启的,需要手动配置环境变量:

export GO15VENDOREXPERIMENT=1

在 go 1.6 版本中,go vendor 已经改为默认开启。

Go Modules

虽然 1.5 版本推出了 go vendor,但是没有解决根本问题,只是依赖的查找上支持到了 vendor 目录,vendor  目录还是需要一些第三方的库(govendor、godep、glide)进行管理,而且对于 GOPATH 环境变量依然有所依赖。

官方为了解决这些问题,终于在 1.11 版本中,实验性的内置了其模块管理的能力(1.12 版本正式开启):go mod。

使用 go mod 的时候,我们无需 GOPATH,所以我们需要把之前配置的 GOPATH 清理掉,调整下目录结构,将  go-story/hello/main.go 直接移动到 go-story/main.go,然后将 src、pkg 目录删除。

# 初始化 go modules go mod init [pkg-name]

如何理解Go语言的模块化

此时,会在目录下生成一个 go.mod 文件。

如何理解Go语言的模块化

查看其内容,发现里面会声明 go 的版本号,以及当前模块的名称。

如何理解Go语言的模块化

然后我们安装依赖(不管是何种依赖管理的方式,安装方法依旧不变):

go get github.com/TreyBastian/colourize

如何理解Go语言的模块化

go.mod 中,会写入添加的依赖,以及版本号,同时,该模块会被安装到 GOPATH 中。由于我们之前将 GOPATH 移除,这里会安装到 GOPATH  的默认值中(~/go/)。

如何理解Go语言的模块化

“如何理解Go语言的模块化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何理解Go语言的模块化

本文链接: https://www.lsjlt.com/news/280724.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Go语言的模块化
    本篇内容介绍了“如何理解Go语言的模块化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!环境变量学习 go 语言的第一步,当然是安装以及环境变...
    99+
    2023-06-15
  • Go 语言中的 HTTP 模块:如何使用 NPM?
    在现代的 Web 应用程序开发中,HTTP 协议是不可或缺的一部分,因为它是浏览器和服务器之间进行通信的标准协议。 Go 语言在其标准库中包含了一个用于处理 HTTP 请求和响应的模块,使得在 Go 语言中开发 Web 应用程序非常方便。...
    99+
    2023-09-08
    http npm linux
  • 如何进行CSS预处理语言的模块化
    这篇文章给大家介绍如何进行CSS预处理语言的模块化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。编写css是前端工作中,一项普通而又频繁的劳动,由于css并不是一门语言,所以在程序设计...
    99+
    2022-10-19
  • Go语言中如何处理并发模块加载问题?
    Go语言中如何处理并发模块加载问题?在Go语言中,并发是一项非常强大的功能。它允许我们同时执行多个任务,提高程序的性能和响应能力。然而,并发编程也带来了一些挑战,其中之一就是并发模块的加载问题。本文将介绍如何使用Go语言中的特性来解决并发模...
    99+
    2023-10-22
    Go语言 并发处理 模块加载
  • 【Go 基础篇】Go语言函数详解:模块化编程与代码复用
    介绍 函数是编程中的基本构建块,用于封装一段代码,使其可以被重复使用。在Go语言中,函数具有丰富的特性,如多参数、多返回值、匿名函数、闭包等,这使得Go语言函数不仅仅是一种执行代码的方式,还是构建模块化程序和实现代码复用的关键工具。本篇博客...
    99+
    2023-08-30
    golang 开发语言 后端
  • 如何使用Go语言打包和加载HTTP模块?
    Go语言是一种简单、高效的编程语言,它被广泛应用于各种领域,特别是在Web开发中。HTTP模块是开发Web应用程序中必不可少的一部分,Go语言提供了许多方便的工具来打包和加载HTTP模块。在本文中,我们将介绍如何使用Go语言打包和加载HTT...
    99+
    2023-10-18
    http 打包 load
  • 如何理解JavaScript模块化
    目录1. 浏览器支持2. export 导出模块3. import 导入模块4. 创建模块对象5. export import 中转站6. 动态加载模块1. 浏览器支持 使用Java...
    99+
    2022-11-12
  • 如何理解Node.js模块化
    本篇内容主要讲解“如何理解Node.js模块化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Node.js模块化”吧!正文在Node.js中,内置了两个...
    99+
    2022-10-19
  • JavaScript 模块化如何理解
    这期内容当中小编将会给大家带来有关JavaScript 模块化如何理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:1.概念将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并...
    99+
    2023-06-22
  • Verilog语言关键字模块例化实例讲解
    目录关键字:例化,generate,全加器,层次访问命名端口连接顺序端口连接端口连接规则用 generate 进行模块例化层次访问关键字:例化,generate,全加器,层次访问 ...
    99+
    2023-05-15
    Verilog语言关键字模块例化 Verilog 模块例化
  • Go语言中的HTTP模块:如何在项目中打包和加载?
    Go语言是一门相对年轻的编程语言,但它在网络编程方面却表现得十分强大。Go语言内置了HTTP模块,使得它成为了一个优秀的Web开发语言。在本文中,我们将讨论如何在你的项目中使用Go语言的HTTP模块,并且演示如何打包和加载这些模块。 Go语...
    99+
    2023-10-18
    http 打包 load
  • 如何使用Go语言编写上门做菜系统中的订单管理模块?
    如何使用Go语言编写上门做菜系统中的订单管理模块?一、引言上门做菜服务已经成为了现代生活中越来越受欢迎的服务和商业模式。在这样的服务中,订单管理是非常重要的一个模块。在本文中,我们将讨论如何使用Go语言来编写一个高效和可靠的订单管理模块。我...
    99+
    2023-11-01
    Go语言 上门做菜系统 订单管理模块
  • Spring框架如何优化GO语言自然语言处理应用?
    随着人工智能技术的不断发展,自然语言处理技术也得到了广泛的应用。而GO语言作为一种高效、安全、简洁的编程语言,自然也被广泛应用于自然语言处理领域。在GO语言自然语言处理应用中,Spring框架可以提供优秀的支持,优化应用的性能和稳定性。 ...
    99+
    2023-06-20
    自然语言处理 二维码 spring
  • JavaScript高级语法中的模块化怎么理解
    这篇文章将为大家详细讲解有关JavaScript高级语法中的模块化怎么理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是模块化?到底什么是模块化、模块...
    99+
    2022-10-19
  • 如何解读Go语言锁
    这篇文章将为大家详细讲解有关如何解读Go语言锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。var l sync.Mutexvar a stringfunc...
    99+
    2022-10-18
  • Python语法中的Module模块该如何理解
    Python语法中的Module模块该如何理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、定义包含一系列数据,函数,类的文件,通常以.py结尾二、作用让一些相关的数据,函...
    99+
    2023-06-22
  • Go语言编程进阶:如何打包和加载复杂的HTTP模块?
    Go语言作为一种高效、简洁的编程语言,逐渐得到了越来越多开发者的青睐。在HTTP模块的开发中,为了使代码更加规范、易于管理,我们经常需要将多个HTTP模块打包成一个可执行文件。本文将介绍如何使用Go语言进行HTTP模块的打包和加载。 一、打...
    99+
    2023-10-18
    http 打包 load
  • Go语言标准库中的log该如何理解
    这篇文章给大家介绍Go语言标准库中的log该如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Go语言标准库中的log介绍1.log1.1使用Loggerlog包定义了Logger...
    99+
    2022-10-19
  • 从零开始学习Go语言:如何打包和加载HTTP模块?
    好的,下面是文章: 在学习Go语言的过程中,我们需要了解如何打包和加载模块。本文将介绍如何打包和加载HTTP模块,以及如何使用HTTP模块来创建Web服务器和客户端。 打包HTTP模块 Go语言内置了HTTP模块,我们可以直接使用。要...
    99+
    2023-10-18
    http 打包 load
  • Go 语言如何优化 Shell 脚本?
    Shell 脚本是一种常见的自动化脚本语言,它可以帮助我们简化许多日常操作。但是,当 Shell 脚本变得越来越复杂时,它的性能和可维护性也会受到影响。为了解决这些问题,我们可以考虑使用 Go 语言来优化 Shell 脚本。 Go 语言是...
    99+
    2023-07-21
    load shell leetcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作