go实战(1)-hello,world与包基础(1)-模块基础

news2024/11/20 3:31:11

目录

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

程序结构

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

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

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

程序代码

package main

import "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-learn


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2022/12/4     22:38                mymode
-a----        2022/12/4     22:18             84 test.go


PS 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\mymode


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2022/12/4     22:39             33 go.mod


PS 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数据之前,首先要根据已签名树散列对其进行身份验证,然后根据已签名树散列的客户时间轴对已签名树散列进行身份验证。

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

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

相关文章

WIFI码挪车码创建生成CPS聚合流量主小程序开发

WIFI码挪车码创建生成CPS聚合流量主小程序开发 系统特点// 这不是一套普通的给别人开SAAS账号的CPS推广返利系统,而是一套服务商版的CPS推广返利系统!所谓服务商版,就是所有CPS推广走你的渠道接口,除了可以给你的下级客户开账号外…

MySQL下载安装运行

方式1、MySQL 官方网站:http://www.mysql.com 拉到最下面: 方式2、Windows版 MySQL 的官方下载地址:https://dev.mysql.com/downloads/mysql/ 配置环境变量:在Path中添加至“\bin”(系统盘C盘)形式 使用管…

【OpenCV 例程 300篇】249. 特征描述之视网膜算法(FREAK)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】249. 特征检测之视网膜算法(FREAK) 1. FREAK 算法简介 快速视网膜算法(FREAK)算法是 Alexandre Alahi 在 ICCV 2012 的论文 FREAK: Fast Retina Keyp…

1.32 Cubemx_STM32F429串口中断+空闲中断

1、简介 有时候串口接收数据时,没有帧头与帧尾,单纯使用单字节中断接收数据,不太好断帧。如果单纯使用空闲中断接收数据,当帧内数据不连续或者黏包,使用空闲中断接收就会出现接收的数据小于或者大于帧长度,比较难断帧。解决办法 方法1、单字节中断接收+空闲中断 发送命…

Spring Cache组件

《Spring Cache组件》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Spring Cache组件》《Spring Cache组件》1. Spring Cache组件概述2. ConcurrentHashMap缓存管理3. Cacheable详解4. Caffeine缓存管理5. 缓存更新策略6. 缓存清除策略7. 多级缓存策略…

[附源码]计算机毕业设计基于Springboot景区直通车服务系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

探究商城中的在线语音谈判功能开发

近年来,电子商务已经成为一种新型的商业形式,电子商务的发展让传统的面对面谈判发展为以互联网为依托的在线沟通,相较于传统的谈判方式,在线语音谈判方式更便捷、更高效,逐渐成为商务谈判的主流,因此该功能…

FastReport Mono 2023.1 Crack

与位于 FastReport 云服务器上的报表进行交互。特征 现在支持与 FastReport Cloud 报告生成器的部分集成。改进的报告验证器包括一个带有错误编号的新的可自定义列。添加了来自 JasperReports 的模板转换器。改进的“MSChartObject”: 常用设置已移至单独的编辑器。…

线程池详细介绍

线程池执行流程 线程池的状态 RUNNINGSHUTDOWNSTOPTIDYINGTERMINATED 线程池优雅关闭 线程池有两个关闭方法,shutdown()和shutdownNow(),shutdown()切换到SHUTDOWN状态,shutdownNow()切换到STOP状态,当队列和线程池都为空的时候…

学习 | ANSYS经典界面在压力容器分析设计中的应用

导读:分析设计作为压力容器设计的重要方法,不仅解决了压力容器常规设计所不能解决的问题,而且也是压力容器设计观点与方法上的一个质的飞跃。 分析设计通常分为两类:应力分类法(弹性方法)和直接法&#xf…

基于FPGA的SD NAND图片显示实现

文章目录 0、前言 1、目标 2、图片的预处理 3、SD NAND的预处理 4、FPGA实现 4.1、详细设计 4.2、仿真 4.3、实验结果 0、前言 在上一篇文章《基于FPGA的SD卡的数据读写实现(SD NAND FLASH)》中,我们了解到了SD NAND Flash的相关知识…

大(json)文件压缩(minify)

文章目录Preface解决方案Preface 现在在做一个 GIS 地图的项目, 做过地图的应该就知道各省/市/县的json文件有多大(大部分都是经纬度数据), 就直接放前台public目录下了. 文件过大, 上传到服务器就占用很多空间, 这时候就有人提出需求, 让把这个问题处理一下. (虽然这个事情没…

mysql日志管理 、备份与恢复

目录 一、数据备份的重要性与分类 1、数据备份的重要性 2、从物理与逻辑的角度,备份分为 3、从数据库的备份策略角度,备份可分为 3.1 完全备份(只适合第一次) 3.2 差异备份(用的较少,有丢失数据的现象…

应用 Serverless 化,让业务开发心无旁骛

我们希望让用户做得更少而收获更多,通过Serverless化,用云就像用电一样简单。”张建锋表示,Serverless 让云计算从一种资源真正变成一种能力,未来云将全面 Serverless 化,更加接近“电网”模式,按计算的调用…

使用Visual Studio Code 进行Python编程

1、下载Visual Studio Code 到微软的Visual Studio Code官方主页下载Visual Studio Code: Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器Visual Studio 开发工具和服务让任何开发人员在任何平台和语言的应用开发都更加轻松。 随时随地免费使用代码编辑器或 I…

web期末网站设计大作业:基于HTML+CSS+JavaScript制作新能源汽车企业网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

负载均衡四层和七层的区别

一. 什么是负载均衡 1)负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡有两方面的含义&#…

基于Boost库的在线搜索引擎

文章目录Boost库搜索引擎1. 项目背景2. 宏观原理3. 搜索引擎技术栈和项目环境4.正排索引vs倒排索引&#xff08;index.hpp&#xff09;1. 正排索引:数组vector<>2. 目标文档进行分词(方便倒排索引和查找)3. 倒排索引&#xff1a;unordered_map<>模拟一次查找的过程…

反向传播不香了?解读 Hinton 大佬的 Forward-Forward 算法

今天解读一篇Hinton大佬最近分享的论文。 在最近的NeurIPS2022会议上&#xff0c;图灵奖得主Hinton作为演讲嘉宾&#xff0c;分享了一个题为《The Forward-Forward Algoritm: Some Preliminary Investigations》的论文。 该论文提出了一种取代反向传播的前向-前向传播的训练方…

华为机试 - 比较两个版本号的大小

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 输入两个版本号 version1 和 version2&#xff0c;每个版本号由多个子版本号组成。 子版本号之间由 “.” 隔开&#xff0c;由大小写字母、数字组成&#xff0c;并且至少有一个字符。 按从左到右的顺…