网站首页 > 文章中心 > 其它

go语言模块_C语言模块结构图

作者:小编 更新时间:2023-09-27 13:18:46 浏览量:20人看过

Golang 游戏leaf系列(六) Go模块

在 Golang 游戏leaf系列(一) 概述与示例 (下文简称系列一)中,提到过Go模块用于创建能够被 Leaf 管理的 goroutine.Go模块是对golang中go提供一些额外功能.Go提供回调功能,LinearContext提供顺序调用功能.善用 goroutine 能够充分利用多核资源,Leaf 提供的 Go 机制解决了原生 goroutine 存在的一些问题:

我们来看一个例子(可以在 LeafServer 的模块的 OnInit 方法中测试):

这里主动调用了 d.Cb(-d.ChanCb) ,把这个回调取出来了.实际上,在skeleton.Run里会自己取这个通道

看一下源码:

go语言模块_C语言模块结构图-图1

New方法,会生成指定缓冲长度的ChanCb.然后调用Go方法就是先执行第一个func,然后把第二个放到Cb里.现在手动造一个例子:

现在把time.Sleep(time.Second)的注释解开,会是啥结果呢

另外,就是close时会判断g.pendingGo

这个例子的意思很明显,NewLinearContext这种方式,即使先调用的慢了半秒,它还是会先执行完.

这里先是用了一个list,加入的时候用mutexLinearGo锁了,都加到最后.然后新开协程去处理,读的时候从最前面开始读,也要用mutexLinearGo锁.执行的时候,也要上锁mutexExecution,确保f()执行完并且写入g.ChanCb回调,这个mutexExecution锁才会解除.现在可以改造一个带回调的例子:

GO语言(十一):开始使用多模块工作区

本教程介绍 Go 中多模块工作区的基础知识.使用多模块工作区,您可以告诉 Go 命令您正在同时在多个模块中编写代码,并轻松地在这些模块中构建和运行代码.

在本教程中,您将在共享的多模块工作区中创建两个模块,对这些模块进行更改,并在构建中查看这些更改的结果.

首先,为您要编写的代码创建一个模块.

①.、打开命令提示符并切换到您的主目录.

go语言模块_C语言模块结构图-图2

在 Linux 或 Mac 上:

在 Windows 上:

我们的示例将创建一个hello依赖于 golang.org/x/example 模块的新模块.

创建土嘎嘎的粉丝们大家好模块:

使用 . 添加对 golang.org/x/example 模块的依赖项go get.

在 hello 目录下创建 hello.go,内容如下:

现在,运行 hello 程序:

在这一步中,我们将创建一个go.work文件来指定模块的工作区.

在workspace目录中,运行:

该go work init命令告诉为包含目录中模块的工作空间go创建一个文件 .go.work./hello

该go命令生成一个go.work如下所示的文件:

该go.work文件的语法与go.mod相同.

该go指令告诉 Go 应该使用哪个版本的 Go 来解释文件.它类似于文件中的go指令go.mod .

该use指令告诉 Go在进行构建时hello目录中的模块应该是主模块.

所以在模块的任何子目录中workspace都会被激活.

Go 命令包括工作区中的所有模块作为主模块.这允许我们在模块中引用一个包,即使在模块之外.在模块或工作区之外运行go run命令会导致错误,因为该go命令不知道要使用哪些模块.

此时此刻呢,我们将golang.org/x/example模块的本地副本添加到工作区.然后,我们将向stringutil包中添加一个新函数,我们可以使用它来代替Reverse.

①.、克隆存储库

在工作区目录中,运行git命令来克隆存储库:

该go work use命令将一个新模块添加到 go.work 文件中.它现在看起来像这样:

该模块现在包括example.com/hello模块和 +golang.org/x/example 模块.

我们将向golang.org/x/example/stringutil包中添加一个新函数以将字符串大写.

将新文件夹添加到workspace/example/stringutil包含以下内容的目录:

修改workspace/hello/hello.go的内容以包含以下内容:

从工作区目录,运行

Go 命令在go.work文件指定的hello目录中查找命令行中指定的example.com/hello模块 ,同样使用go.work文件解析导入golang.org/x/example.

go.work可以用来代替添加replace 指令以跨多个模块工作.

由于这两个模块在同一个工作区中,所以呢很容易在一个模块中进行更改并在另一个模块中使用它.

现在,要正确发布这些模块,我们需要发布golang.org/x/example 模块,例如在v0.1.0. 这通常通过在模块的版本控制存储库上标记提交来完成.发布完成后,我们可以增加对 golang.org/x/example模块的要求hello/go.mod:

这样,该go命令可以正确解析工作区之外的模块.

GO语言(十六):模糊测试入门(上)

本教程介绍了 Go 中模糊测试的基础知识.通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入.可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击.

在本教程中,您将为一个简单的函数编写一个模糊测试,运行 go 命令,并调试和修复代码中的问题.

首先,为您要编写的代码创建一个文件夹.

运行go mod init命令,为其提供新代码的模块路径.

此时此刻呢,您将添加一些简单的代码来反转字符串,稍后我们将对其进行模糊测试.

在此步骤中,您将添加一个函数来反转字符串.

独立程序(与库相反)始终位于 package 中main.

此函数将接受string,使用byte进行循环 ,并在最后返回反转的字符串.

此函数将运行一些Reverse操作,然后将输出打印到命令行.这有助于查看运行中的代码,并可能有助于调试.

e.该main函数使用 fmt 包,所以呢您需要导入它.

第一行代码应如下所示:

从包含 main.go 的目录中的命令行,运行代码.

可以看到原来的字符串,反转它的结果,然后再反转它的结果,就相当于原来的了.

现在代码正在运行,是时候测试它了.

在这一步中,您将为Reverse函数编写一个基本的单元测试.

b.将以下代码粘贴到 reverse_test.go 中.

这个简单的测试将断言列出的输入字符串将被正确反转.

使用运行单元测试go test

此时此刻呢,您将单元测试更改为模糊测试.

单元测试有局限性,即每个输入都必须由开发人员添加到测试中.模糊测试的一个好处是它可以为您的代码提供输入,并且可以识别您提出的测试用例没有达到的边缘用例.

在本节中,您将单元测试转换为模糊测试,这样您就可以用更少的工作生成更多的输入!

请注意,您可以将单元测试、基准测试和模糊测试保存在同一个 *_test.go 文件中,但对于本示例,您将单元测试转换为模糊测试.

Fuzzing 也有一些限制.在您的单元测试中,您可以预测Reverse函数的预期输出,并验证实际输出是否满足这些预期.

例如,在测试用例Reverse("Hello, world")中,单元测试将返回指定为"dlrow ,olleH".

模糊测试时,您无法预测预期输出,因为您无法控制输入.

但是,Reverse您可以在模糊测试中验证函数的一些属性.在这个模糊测试中检查的两个属性是:

(1)将字符串反转两次保留原始值

注意单元测试和模糊测试之间的语法差异:

随着单元测试转换为模糊测试,是时候再次运行测试了.

a.在不进行模糊测试的情况下运行模糊测试,以确保种子输入通过.

如果您在该文件中有其他测试,您也可以运行go test -run=FuzzReverse,并且您只想运行模糊测试.

b.运行FuzzReverse模糊测试,查看是否有任何随机生成的字符串输入会导致失败.这是使用go test新标志-fuzz执行的.

语料库文件的第一行表示编码版本.以下每一行代表构成语料库条目的每种类型的值.由于 fuzz target 只需要 1 个输入,所以呢版本之后只有 1 个值.

c.运行没有-fuzz标志的go test; 新的失败种子语料库条目将被使用:

由于我们的测试失败,是时候调试了.

GO语言(二十五):管理依赖项(上)-

当您的代码使用外部包时,这些包(作为模块分发)成为依赖项.随着时间的推移,您可能需要升级或更换它们.Go 提供了依赖管理工具,可帮助您在合并外部依赖项时确保 Go 应用程序的安全.

本主题介绍如何执行任务以管理您在代码中承担的依赖项.您可以使用 Go 工具执行其中的大部分操作.本主题还介绍了如何执行其他一些您可能会觉得有用的依赖相关任务.

您可以通过 Go 工具获取和使用有用的包.在 pkg.go.dev 上,您可以搜索您可能觉得有用的包,然后使用go命令将这些包导入您自己的代码中以调用它们的功能.

下面列出了最常见的依赖项管理步骤.

在 Go 中,您将依赖项作为包含您导入的包的模块来管理.此过程由以下机构支持:

您可以搜索pkg.go.dev以查找具有您可能觉得有用的功能的软件包.

找到要在代码中使用的包后,在页面顶部找到包路径,然后单击复制路径按钮将路径复制到剪贴板.在您自己的代码中,将路径粘贴到导入语句中,如下例所示:

在您的代码导入包后,启用依赖项跟踪并获取包的代码进行编译.

要跟踪和管理您添加的依赖项,您首先要将代码放入其自己的模块中.这会在源代码树的根目录创建一个 go.mod 文件.您添加的依赖项将列在该文件中.

go语言模块_C语言模块结构图-图3

要将您的代码添加到它自己的模块中,请使用 go mod init命令.例如,从命令行切换到代码的根目录,然后按照以下示例运行命令:

该go mod init命令的参数是您的模块的模块路径.如果可能,模块路径应该是源代码的存储库位置.

如果一开始您不知道模块的最终存储库位置,请使用安全的替代品.这可能是您拥有的域的名称或您控制的另一个名称(例如您的公司名称),以及来自模块名称或源目录的路径.

当您使用 Go 工具管理依赖项时,这些工具会更新 go.mod 文件,以便它维护您的依赖项的当前列表.

在代码中包含存储库中的 go.mod 和 go.sum 文件.

当您运行go mod init创建用于跟踪依赖项的模块时,您指定一个模块路径作为模块的名称.模块路径成为模块中包的导入路径前缀.一定要指定一个不会与其他模块的模块路径冲突的模块路径.

模块路径通常采用以下形式:

①.、Go 工具可以在其中找到模块源代码的存储库的位置.

例如,它可能是github.com/ /.

如果您认为您可能会发布模块供其他人使用,请使用此最佳实践.

如果您不使用存储库名称,请务必选择一个您确信不会被其他人使用的前缀.一个不错的选择是您公司的名称.避免使用常用术语,例如widgets、utilities或 app.

Go 保证以下字符串不会在包名称中使用.

①.、test– 您可以将test用作模块路径前缀以便代码用于在另一个模块中本地测试功能进行测试.

使用test作为模块路径前缀是测试的一部分.例如,您的测试本身可能会运行go mod init test,然后以某种特定方式设置该模块,以便使用 Go 源代码分析工具进行测试.

请注意,Go 文档还用于example.com说明示例何时可能是已发布的模块.

GO语言(二十七):管理依赖项(下)-

当您对外部模块的存储库进行了 fork (例如修复模块代码中的问题或添加功能)时,您可以让 Go 工具将您的 fork 用于模块的源代码.这对于测试您自己的代码的更改很有用.

为此,您可以使用go.mod 文件中的replace指令将外部模块的原始模块路径替换为存储库中 fork 的路径.这指示 Go 工具在编译时使用替换路径(fork 的位置),例如,同时允许您保留import 原始模块路径中的语句不变.

在以下 go.mod 文件示例中,当前模块需要外部模块example.com/theirmodule.然后该replace指令将原始模块路径替换为example.com/myfork/theirmodule模块自己的存储库的分支.

设置require/replace对时,使用 Go 工具命令确保文件描述的需求保持一致.使用go list命令获取当前模块正在使用的版本.然后使用go mod edit命令将需要的模块替换为fork:

注意: 当您使用该replace指令时,Go 工具不会像添加依赖项中所述对外部模块进行身份验证.

您可以使用go get命令从其存储库中的特定提交为模块添加未发布的代码.

以下示例提供了一些说明.这些基于源位于 git 存储库中的模块.

当您的代码不再使用模块中的任何包时,您可以停止将该模块作为依赖项进行跟踪.

要停止跟踪所有未使用的模块,请运行go mod tidy 命令.此命令还可能添加在模块中构建包所需的缺失依赖项.

要删除特定依赖项,请使用go get,指定模块的模块路径并附加 @none,如下例所示:

go get命令还将降级或删除依赖于已删除模块的其他依赖项.

如果您(或您的团队)已经设置或选择了您想要使用的不同模块代理服务器,您可能想要这样做.例如,有些人设置了模块代理服务器,以便更好地控制依赖项的使用方式.

您可以将变量设置为其他模块代理服务器的 URL,用逗号或管道分隔 URL.

GOPRIVATE或环境变量可以设置为匹配模块前缀的全局模式列表,这些GONOPROXY前缀是私有的,不应从任何代理请求.例如:

「测试开发全栈化-Go」(1) Go语言基本了解

作为一个测试,作为一个测试开发, 全栈化+管理 是我们未来的发展方向.已经掌握了Java、Python、HTML的你,是不是也想了解下最近异常火爆的Go语言呢?来吧,让我们一起了解下.

Go 是一个开源的编程语言 ,它能让构造简单、可靠且高效的软件变得容易.

此时此刻呢说说 Go语言的特色 :

简洁、快速、安全

并行、有趣、开源

内存管理、数组安全、编译迅速

Go语言的用途 :

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言.

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率.它提供了海量并行的支持,这对于 游戏 服务端的开发而言是再好不过了.

Go语言的环境安装:

建议直接打开 官方地址因为墙的原因打不开

因为我用的是windows系统,这里主要讲下Windows系统上使用Go语言来编程.

默认情况下 .msi 文件会安装在 c:Go 目录下.你可以将 c:Gobin 目录添加到 Path 环境变量中.添加后你需要重启命令窗口才能生效.个人建议还是安装到 Program Files文件夹中.

使用什么开发工具来对Go语言进行编写:

建议参考网页:

解决vscode中golang插件安装失败方法

在学习go的过程中,使用的是vscode,但是一直提示安装相关插件失败,然后上网查方法,基本上是叫你建立golang.org目录什么的,结果全是错的,而且都是抄袭,很烦.无意之中看到一位博主分享的方法,他也是饱受上述的垃圾博文困扰,然后找到了解决方法,这里向他致敬,秉着让更多人看到正确解决方法的心,我写下正确的解决方法,希望对你有所帮助,也可以点开原博主链接参考:

Go有一个全球模块代理,设置代理再去安装golang的插件,就可以安装成功了.步骤有,首先Windows用户打开Powershell,一个蓝色的界面,注意不是cmd!不知道的直接打开window下面的搜索,然后输入powershell,搜索出来就可以了.

$env:GO111MODULE="on"

$env:GOPROXY=""

go env -w GOPROXY=

go env -w GOPRIVATE=*.corp.example.com

然后我们打开VsCode界面,下面会提示安装插件,我们选择Install ALL,就会安装成功

当你在运行Go语言程序时,提示所有的插件包都已经安装成功了时,就可以正常使用了,要不然一堆报错会让你非常心烦.

好了,今天先到这里,晚安、下班~

以上就是土嘎嘎小编为大家整理的go语言模块相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章