go实战(1)-hello,world与包基础(1)-模块基础
创始人
2024-03-18 22:22:43

目录

    • 程序结构
    • 程序代码
    • 使用和建立包
      • 建立目录
      • 模块参考中的身份验证
        • 计算哈希值
        • go.sum文件
      • Checksum database

程序结构

声明一个main包(包是对函数进行分组的一种方法,它由同一目录中的所有文件组成)。

导入流行的fmt包,它包含格式化文本的函数,包括打印到控制台。这个包是安装Go时得到的标准库包之一。

实现main函数将消息打印到控制台。当运行主包时,默认执行main函数。

程序代码

package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}

编译运行

使用geany在这里插入图片描述
或者控制台运行

PS F:\learn\go-learn> go run test.go
Hello, World!
PS F:\learn\go-learn>

使用和建立包

当您需要您的代码执行一些可能已经由其他人实现的事情时,您可以寻找具有可以在您的代码中使用的功能的包。
首先创建一个Go模块。在模块中,您为一组离散而有用的函数收集一个或多个相关包。
Go代码被分组到包中,包被分组到模块中。您的模块指定了运行代码所需的依赖项,包括Go版本和它所需的其他模块集。

当您在模块中添加或改进功能时,您将发布模块的新版本。编写调用模块中函数的代码的开发人员可以导入模块的更新包,并在将其投入生产使用之前使用新版本进行测试。

建立目录

PS F:\learn\go-learn> mkdir mymode
PS F:\learn\go-learn> ls目录: F:\learn\go-learnMode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2022/12/4     22:38                mymode
-a----        2022/12/4     22:18             84 test.goPS F:\learn\go-learn> cd mymode
PS F:\learn\go-learn\mymode> go mod init myexample/mymode
go: creating new go.mod: module myexample/mymode
PS F:\learn\go-learn\mymode> ls目录: F:\learn\go-learn\mymodeMode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2022/12/4     22:39             33 go.modPS F:\learn\go-learn\mymode>

模块参考中的身份验证

计算哈希值

当go命令下载一个模块zip文件或go。Mod文件到模块缓存中,它计算一个加密散列,并将其与一个已知值进行比较,以验证文件自第一次下载以来没有更改过。如果下载的文件没有正确的散列,go命令会报告安全错误。
Mod文件,go命令从文件内容计算哈希值。对于模块zip文件,go命令以确定的顺序从存档中文件的名称和内容计算哈希值。哈希不受文件顺序、压缩、对齐和其他元数据的影响。
go命令将每个散列与main模块的go. sum文件中每个对应的行进行比较,如果哈希值与go.Sum中的哈希值不同, go命令报告一个安全错误并删除下载的文件,而不将其添加到模块缓存中。
如果go.sum不存在或者如果它不包含下载文件的散列,go命令可以使用校验和数据库验证散列,校验和数据库是公共可用模块的全局散列源。一旦哈希得到验证,go命令将其添加到go中。并将下载的文件添加到模块缓存中。如果一个模块是私有的(由GOPRIVATE或GONOSUMDB环境变量匹配),或者如果校验和数据库被禁用(通过设置GOSUMDB=off), go命令接受散列并将文件添加到模块缓存中,而不进行验证。

go.sum文件

模块可以有一个名为go.Sum的文本文件。在它的根目录中,在它的go.mod文件旁边。
go.Sum包含模块的直接和间接依赖项的加密散列。当go命令将模块的.mod或.zip文件下载到模块缓存中时,它会计算一个散列,并检查该散列是否与主模块的go.sum中的相应散列相匹配。如果模块没有依赖项,或者所有依赖项都使用replace指令替换为本地目录,Sum可能为空或不存在。

模块路径是散列所属模块的名称。
go.sum有三个用空格分隔的字段:模块路径、版本(可能以/go.mod结尾)和散列。
块路径是散列所属模块的名称。
版本是散列所属模块的版本。如果版本以/go.Mod结束,哈希是为了模块的运行。只有Mod文件;否则,该散列是针对模块的.zip文件中的文件。

哈希列由一个算法名(如h1)和一个base64编码的加密哈希组成,用冒号(:)分隔。目前支持的哈希算法只有SHA-256 (h1)。如果未来发现SHA-256中的漏洞,将增加对另一种算法(命名为h2等)的支持。

go.Sum文件可能包含一个模块的多个版本的散列。go命令可能需要从依赖项的多个版本的文件加载go.Mod,以便进行最小版本选择。还可能包含不再需要的模块版本的散列(例如,升级后)。
Go mod tidy将添加丢失的散列,并从Go .sum中删除不必要的散列。

Checksum database

校验的数据库是go的一个全局源。
go命令可以在许多情况下使用它来检测代理或源服务器的不当行为。
校验和数据库允许所有公开可用模块版本的全局一致性和可靠性。它使得不可信的代理成为可能,因为它们不可能在不被发现的情况下提供错误的代码。它还确保与特定版本相关的位不会在一天到一天之间发生变化,即使模块的作者随后更改了他们存储库中的标记。
校验和数据库由sum.golang.org提供服务,该数据库由谷歌运行。
它是go.sum行散列的Transparent Log,它由Trillian支持。默克尔树的主要优点是独立审计员可以验证它没有被篡改,因此它比简单的数据库更值得信任。

如果go命令查询校验和数据库,那么第一步是通过/lookup端点检索记录数据。如果模块版本还没有记录在日志中,校验和数据库将在回复之前尝试从源服务器获取它。

这个/lookup数据提供了这个模块版本的和 (sum)以及它在日志中的位置,它通知客户端应该获取哪些块来执行证明。
在添加新的go.sum行去main主模块的go前,go命令执行“inclusion”证明(日志中存在特定的记录)和“一致性”证明(树没有被篡改)。
重要的是,在使用/lookup数据之前,首先要根据已签名树散列对其进行身份验证,然后根据已签名树散列的客户时间轴对已签名树散列进行身份验证。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...