Golang 多模块开发

news2024/11/16 8:44:50

Golang 多模块开发

今天学习下Golang中多模块的基础知识,学习多模块的运行原理,使用多模块的方式,可以让开发者的代码在其他多个模块中构建、运行。提高代码的复用,从而提高开发效率。

在今天的学习中,将在工作工作空间中创建两个模块,然后进行模块之间的引用,并运行程序结果。

前提条件

基本要求

  • Go 1.18 及更高版本
  • 合适的编译工具 - text编辑器也满足要求
  • 命令终端 - Linux、Mac系统shell, Windows系统的Cmd、PowerShell

本地环境

  • Go 版本信息

在这里插入图片描述

  • 系统信息 - MacOS
  • 编辑工具 - Sublime Text

代码开发

创建模块

  1. 打开shell终端,进入代码目录

    在这里插入图片描述

  2. 创建工作空间,并进入

    $ mkdir workspace
    $ cd workspace
    
  3. 初始化模块 - 新创建一个hello模块,依赖golang.org/x/example模块

    • 创建hello模块
    $ mkdir hello
    $ cd hello
    $ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello
    
    • 添加依赖
    $ go get golang.org/x/example
    

    在这里插入图片描述

  4. 在hello目录下,创建hello.go源文件,内容如下

    package main
    import (
        "fmt"
    
        "golang.org/x/example/stringutil"
    )
    func main() {
        fmt.Println(stringutil.Reverse("Hello"))
    }
    
  5. 运行程序

$ go run example.com/hello

在这里插入图片描述

创建工作空间

在这一步中,创建go.workwe

  • 初始化工作空间 - 在workspace目录下 执行以下命令,该命令会自动生成一个go.work 文件

    $ go work init ./hello
    
  • go.work 文件的内容如下

    在这里插入图片描述

    go.work文件内容的语法跟 go.mod 类似。第一行告诉Go编译器 使用哪个版本来解释文件;第二行告诉Go, 编译时的主模块;

  • 运行程序 - 在workspace目录执行命令(区别之前在hello目录下执行)

    $ go run example.com/hello
    

    在这里插入图片描述

Go命令将工作空间中的所有模块作为主模块。这允许我们引用模块内的包,甚至模块外的包。在模块或工作区外运行go run命令将导致错误,因为go命令不知道要使用哪些模块。

接下来,我们将向工作区添加golang.org/x/example模块的本地副本。然后,我们将向stringtil包添加一个新函数,我们可以使用它来代替Reverse。

修改源码

在这一步中,我们将下载包含golang.org/x/example模块的Git repo副本,将其添加到工作区,然其中添加一个新函数,然后将从hello程序中使用该函数。

  1. 克隆代码 - 在workspace目录 执行以以下命令复制git代码

    $ git clone https://go.googlesource.com/example
    Cloning into 'example'...
    remote: Total 165 (delta 27), reused 165 (delta 27)
    Receiving objects: 100% (165/165), 434.18 KiB | 1022.00 KiB/s, done.
    Resolving deltas: 100% (27/27), done.
    

    遗憾的是,国内的环境并不一定能够通过git clone的命令复制代码,会出现以下错误

    在这里插入图片描述

    可以点击此连接 官网 下载代码压缩包

    在这里插入图片描述

    下载完毕后,将压缩包进行解压 并重新命名会example,workspace的代码结构如下

    在这里插入图片描述

  2. 增加模块 - 使用命令新增模块

    go work use ./example
    

    至此,go.work文件中依赖了两个模块

    在这里插入图片描述

  3. 新增函数 - 在workspace/example/stringutil目录下新增 toupper.go文件,文件内容如下

    package stringutil
    
    import "unicode"
    
    // ToUpper uppercases all the runes in its argument string.
    func ToUpper(s string) string {
        r := []rune(s)
        for i := range r {
            r[i] = unicode.ToUpper(r[i])
        }
        return string(r)
    }
    
  4. 调用新增函数 - 修改workspace/hello/hello.go代码文件

    func main() {
        fmt.Println(stringutil.ToUpper("Hello"))
        fmt.Println(stringutil.Reverse("Hello"))
    }
    
  5. 执行代码 - 在workspace目录下执行

    go run example.com/hello
    

    在这里插入图片描述

至此,我们学会了拉取github上的原代码,并学会了如何新增函数,如何调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bfs入门教程(广度优先搜索)(含图解)

源自《啊哈算法》 目录 bfs正文 题目 思路 完整代码1 完整代码2 再解炸弹人 题目 思路 完整代码1 完整代码2 总结 bfs正文 第四章--深度优先搜索中,我们用dfs找到了寻找小哈的最短路径 接下来,我们要用bfs(Breadth First Sear…

Zookeeper的本地安装部署和分布式安装部署

文章目录一. 本地模式安装部署1)安装前准备2)配置修改3)操作Zookeeper1.2 配置参数解读二. 分布式安装部署1)集群规划2)解压安装3)配置服务器编号4)配置zoo.cfg文件5)集群操作客户端…

Leetcode.126 单词接龙 II

题目链接 Leetcode.126 单词接龙 II 题目描述 按字典 wordList完成从单词 beginWord到单词 endWord转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk这样的单词序列,并满足: 每对相邻的单词之间…

《高效能团队模式》读书笔记2

如果我们将团队类型的数量缩减为四类基本团队拓扑,这个问题就迎刃而解了。 流动式团队 赋能团队 复杂子系统团队 平台团队只要使用得当,这四类团队拓扑能够满足构建和运行现代软件系统的需要。结合有效的软件边界(第6章)和团队交互…

Java注解,元注解,自定义注解的使用

Java注解,元注解,自定义注解的使用Java注解基本的注解1.Override2.Deprecated3.SuppressWarnings4.SafeVarargs5.FunctionalInterfaceJava提供的元注解1.Retention2.Target3.Documented4.Inherited自定义注解自定义注解的使用Java注解 从JDK5开始,Java增…

从旺店通·企业奇门到用友U8通过接口集成数据

接入系统:旺店通企业奇门慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级,实现企业规模化发展。对接系统&…

本地数仓项目(四)—— 即席查询

1 背景 本文描述本地数仓项目即席查询相关内容,主要涉及即席查询工具包括Presto、Druid、Kylin。 本文基于文章《本地数据仓库项目(一) —— 本地数仓搭建详细流程》 和《本地数仓项目(二)——搭建系统业务数仓详细流程》以及《本地数仓项目(三)—— 数…

金蝶云星辰和旺店通企业版奇门单据接口集成

金蝶云星辰V1和旺店通企业奇门单据接口集成对接源平台:旺店通企业奇门慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级,实…

图的基本概念以及表示方法(链式前向星重点理解,简单易懂版)

图表示一个集合中元素之间存在的多对多关系的一种数据结构。 图的一些定义 : 1.图由顶点和连接顶点的边构成,即G ( V , E ) ,其中V为顶点集合,E为边的集合。2.边表示两个顶点之间存在某种关系,边表示为(…

Elasticsearch7.8.0版本高级查询—— 单字段排序文档

目录一、初始化文档数据二、单字段排序文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中,向 ES 服务器发 POST 请求 :http://localhost:9200/user/_doc/1,请求体内容为: { "name":"zhangsan", "…

可笑 在网页上复制点东西 还需要money?进来看~

前言 哈喽 大家好! 我是木易巷,我回来啦!!! 现在好多平台都变成了不开会员不能复制这样的情况。士可杀不可辱!作为一个优秀的复制粘贴工程师,在网页上复制点东西,还需要我掏钱&#…

【Springboot】idea中配置文件不生效、自动提示功能消失、小绿标不出现现象

怎么解决idea中配置文件不生效、自动提示功能消失、小绿标不出现现象先要明确一个核心,就是自动提示功能不是SpringBoot技术给我们提供的,是我们在Idea工具下编程,这个编程工具给我们提供的。明白了这一点后,再来说为什么会出现这…

07.C语言文件操作

1. 使用文件的原因我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下…

盒模型 盒子的组成部分 1. 内容 content 2. 填充 (内边距) padding 3. 边框 border 4. 外边距 margin

目录盒模型盒子的组成部分1. 内容 content2. 填充 (内边距) padding3. 边框 border4. 外边距 margin盒模型 box:盒子,每个元素在页面中都会生成一个矩形区域(盒子) 盒子类型: 行盒,display等于inline的元…

使用Seq2Seq实现中英文翻译

介绍 Deep NLP 自然语言处理NLP是计算机科学、人工智能和语言学交叉领域的分支科学,主要让计算机处理和理解自然语言,如机器翻译、问答系统等。但因其在学习和使用语言的复杂性,通常认为NLP是困难的,近几年,随着深度…

MedCalc:生物医学研究的统计软件 Crack

MedCalc:生物医学研究的统计软件 MedCalc是用于生物医学研究的统计软件包,统计数据包括 220 多个统计测试、程序和图表,ROC曲线分析、方法比较和质量控制工具。 简单易学,快速可靠 MedCalc 包括 220 多种统计测试、程序和图表 RO…

springboot+vue整合JustAuth实现第三方登录

前后端分离版实现第三方登录&#xff1a;GITEE为例 1&#xff1a;首先maven安装依赖&#xff1a; <!-- oauth工具类 --><dependency><groupId>com.xkcoding.justauth</groupId><artifactId>justauth-spring-boot-starter</artifactId><…

学习wifi操作模块simplewifi的基本用法

之前学习Python的过程中学过基于pywifi模块操作wifi连接的用法&#xff0c;在dotnet中&#xff0c;SimpleWifi也支持类似的功能。SimpleWifi是C#语言编写的在Windows系统中管理wifi连接的库&#xff0c;它抽象并封装了Managed Wifi API中的wifi操作相关函数&#xff0c;更易于使…

词向量与语言模型

本篇博客是对于 https://www.cnblogs.com/nickchen121/p/15105048.html#%E7%AC%AC%E4%B8%80%E7%AF%87-transformergptbert%E9%A2%84%E8%AE%AD%E7%BB%83%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E7%9A%84%E5%89%8D%E4%B8%96%E4%BB%8A%E7%94%9F%E7%90%86%E8%AE%BA的归纳 先来了解一…

django,uwsgi,nginx部署配置要点整理

注意&#xff1a; 1.只对关键点进行整理&#xff1a; 2.python_test是项目名称 环境&#xff1a; python:v3.10.9 1.部署前&#xff0c;执行 python manage.py check --deploy 根据提示进行部署检查&#xff0c;调整&#xff0c;ssl相关的可以不做调整 2.settings.py最终版…