当前位置: 首页 > news >正文

Go小技巧易错点100例(二十六)

请在此添加图片描述

本期分享

1. string转[]byte是否会发生内存拷贝

2. Go程序获取文件的哈希值


正文

string转[]byte是否会发生内存拷贝

在Go语言中,字符串转换为字节数组([]byte)确实会发生内存拷贝。这是因为在Go中,字符串是不可变的,而字节数组是可变的。字符串的内部表示是一个只读的字节序列,而字节数组是一个可写的字节序列。因此,将字符串转换为字节数组时,需要将字符串中的字节内容复制到新的字节数组空间中。

内存拷贝的影响

性能影响:内存拷贝会增加一些开销,尤其是在处理非常大的字符串时。虽然现代计算机处理这种操作通常非常快,但在性能敏感的应用中,这可能是一个需要考虑的因素。

内存使用:由于需要分配新的内存空间来存储字节数组,因此会增加内存的使用量。这可能会导致更高的内存占用和潜在的垃圾回收压力。

示例代码

下面是一个简单的示例,展示了如何将字符串转换为字节数组,并解释内存拷贝的过程:

func TestStringToByteArray(t *testing.T) {// 定义一个字符串str := "Hello, World!"// 将字符串转换为字节数组byteArray := []byte(str)// 打印字符串和字节数组的内容fmt.Println("String:", str)fmt.Println("Byte Array:", byteArray)// 打印字符串和字节数组的内存地址fmt.Printf("Address of string data: %p\n", unsafe.Pointer(&str))fmt.Printf("Address of byte array: %p\n", unsafe.Pointer(&byteArray))// 修改字节数组中的元素,验证它是独立的副本byteArray[0] = 'h'fmt.Println("Modified Byte Array:", byteArray)fmt.Println("String after modification (should be unchanged):", str)
}

输出:

String: Hello, World!
Byte Array: [72 101 108 108 111 44 32 87 111 114 108 100 33]
Address of string data: 0xc000024500
Address of byte array: 0xc000008228
Modified Byte Array: [104 101 108 108 111 44 32 87 111 114 108 100 33]
String after modification (should be unchanged): Hello, World!

strbyteArray 的内容在转换后是一样的,但它们的内存地址是不同的,这证明了内存拷贝的发生,并且修改 byteArray 的第一个元素不会影响到 str,因为 byteArraystr 的一个独立副本。

总结

在Go中,将字符串转换为字节数组会触发内存拷贝,这会影响性能和内存使用。在大多数情况下,这种开销是可以接受的,但在性能敏感的应用中,需要仔细考虑这种转换的代价。

Go程序获取文件的哈希值

计算文件的哈希值在多个领域和场景中有着广泛的应用,主要用途为以下几点:

1)完整性校验:哈希值可以作为文件的唯一标识,用于检测文件在传输或存储过程中是否被篡改或损坏。在下载文件时,常见的做法是从可靠来源获取文件的哈希值,并在下载完成后计算文件的哈希值进行比对,以确保文件的完整性。

2)去重与快速查找:哈希值可以用于快速判断两个文件是否相同,因为相同的文件会产生相同的哈希值。在处理大量文件时,可以使用哈希值进行去重操作,或者构建哈希表来加速查找过程。

3)数字签名:哈希值可以作为数字签名的一部分,用于验证文件的来源和完整性。发送方对文件计算哈希值,并使用私钥对哈希值进行加密生成数字签名。接收方使用发送方的公钥解密数字签名,并重新计算文件的哈希值进行比对,以验证文件的真实性和完整性。

4)密码学应用:在密码学领域,哈希值可以用于实现各种安全机制,如密码存储(使用哈希算法存储密码的哈希值而不是明文密码)、消息认证码(MAC)等。

5)分布式系统:在分布式系统中,哈希值可以用于数据分片和负载均衡。例如,可以将数据文件的哈希值作为键,根据哈希值将数据分配到不同的节点上。

6)版本控制:在软件开发中,哈希值可以用于版本控制,以跟踪文件的变化。每次文件更新时,都会计算新的哈希值,并与之前的哈希值进行比对,以确定文件是否已被修改。

那么在Go语言如何计算文件的哈希值?

代码:

func CalculateFileHash(filePath string) (string, error) {file, err := os.Open(filePath)if err != nil {return "", err}defer func() {_ = file.Close()}()hash := sha256.New()if _, err := io.Copy(hash, file); err != nil {return "", err}hashInBytes := hash.Sum(nil)[:32] // SHA-256 produces a 32 byte hashreturn fmt.Sprintf("%x", hashInBytes), nil
}

测试用例:

func TestCalculateFileHash(t *testing.T) {hash, err := CalculateFileHash("hello.go")if err != nil {t.Error(err)}fmt.Println(hash) 
}

可以发现在修改文件内容前后文件的哈希值会发送变化。

本篇结束~

相关文章:

Go小技巧易错点100例(二十六)

本期分享: 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文: string转[]byte是否会发生内存拷贝 在Go语言中,字符串转换为字节数组([]byte)确实会发生内存拷贝。这是因为在Go中,字…...

《算法笔记》3.5小节——入门模拟->进制转换

1022 D进制的AB #include <iostream> using namespace std; int maxn32;int main() {int z[maxn],num0,a,b,d;cin>>a>>b>>d;int resab;do{z[num]res%d;resres/d;}while(res);for (int i num-1; i >0 ; i--) {cout<<z[i];}return 0; }问题 A:…...

【MQTT-协议原理】

MQTT-协议原理 ■ MQTT-协议原理■ MQTT-服务器 称为"消息代理"&#xff08;Broker&#xff09;■ MQTT协议中的订阅、主题、会话■ 一、订阅&#xff08;Subscription&#xff09;■ 二、会话&#xff08;Session&#xff09;■ 三、主题名&#xff08;Topic Name&a…...

JWT认证服务与授权 .netCore

1.实现流程图 2.认证信息概述 Header:System.IdentityModel.Tokens.Jwt.JwtHeader Payload: System.IdentityModel.Tokens.Jwt.JwtPayload Issuer: http://localhost:7200 Audience: http://localhost:7200 Expiration: 2025/4/11 15:06:14 Claim - Type: http://schemas…...

编译原理 实验二 词法分析程序自动生成工具实验

文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件&#xff0c;复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验 实验预备知识…...

【C++初学】课后作业汇总复习(一)概述、输入输出、类的入门——理解封装

一、概述、输入输出、类的入门——理解封装 - 1. ab input two number output sum of a and b; #include <iostream>using namespace std;int main() {int a 0;int b 0;cin >> a >> b;cout << ab <<endl;return 0; }2.输入1~7任意一个整数&…...

数学建模:针对汽车行驶工况构建思路的延伸应用

前言&#xff1a; 汽车行驶工况构建的思简单理解为将采集的大量数据进行“去除干扰、数据处理&#xff0c;缩减至1800S的数据”&#xff0c;并可达到等效替换的目的&#xff0c;可以使在试验室快速复现&#xff1b;相应的解决思路、办法可应用在 “通过能量流采集设备大量采集…...

Qt 之opengl shader language

着色器示例代码 实际运行效果...

dolphinscheduler创建文件夹显示存储未启用的问题--已解决

只要修改api-server/comf/common.properties和standalone-server/conf/common.properties里面的内容就可以了&#xff0c;应为你要靠standalone-server这个服务启动dolphinscheduler-web&#xff0c;其他就算怎么改你重启dolphinscheduler的时候系统也不会识别新的common.prope…...

解密 Linux 线程:多线程编程与资源管理

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 在Linux中&#xff0c;线程 是一种轻量级的执行单元&#xff0c;它是进程的一部分。多个线程可以在同一个进程内并行执行任务&#xff0c;通常它们共享该进程的资源&#xff0c;如内存空间、文件描述符等。…...

Node.js net模块详解

Node.js 的 net 模块提供了基于 TCP 或 IPC 的网络通信能力&#xff0c;用于创建服务器和客户端。以下是 net 模块的核心 API 详解&#xff0c;包含类、方法、事件及示例。 1. 模块引入 const net require(net);2. 核心类与方法 2.1 net.Server 类 用于创建 TCP 或 IPC 服务…...

Node.js中fs模块详解

Node.js 中 fs 模块&#xff08;非 Promise&#xff09;API 详解 Node.js 的 fs 模块提供了同步和异步的文件系统操作。以下是非 Promise 版本的 API 详解&#xff1a; 1. 文件读取操作 const fs require(fs);// 异步读取文件 fs.readFile(file.txt, utf8, (err, data) >…...

Mouse without Borders – 用一套鼠标 / 键盘控制四台电脑

同时操控 2 台电脑&#xff0c;只需一个鼠标和键盘&#xff01;完全免费&#xff0c;由微软官方提供 | 零度解说_哔哩哔哩_bilibili Mouse Without Borders 简介‌ Mouse Without Borders&#xff08;无界鼠标&#xff09;是由微软开发的免费键鼠共享工具&#xff0c;支持在局…...

《车辆人机工程-汽车驾驶操纵实验》

汽车操纵装置有哪几种&#xff0c;各有什么特点 汽车操纵装置是驾驶员直接控制车辆行驶状态的关键部件&#xff0c;主要包括以下几种&#xff0c;其特点如下&#xff1a; 一、方向盘&#xff08;转向操纵装置&#xff09; 作用&#xff1a;控制车辆行驶方向&#xff0c;通过转…...

使用DaemonSet部署集群守护进程集

使用DaemonSet部署集群守护进程集 文章目录 使用DaemonSet部署集群守护进程集[toc]一、使用DaemonSet部署日志收集守护进程集二、管理DaemonSet部署的集群守护进程集1.对DaemonSet执行滚动更新操作2.对DaemonSet执行回滚操作3.删除DaemonSet 一、使用DaemonSet部署日志收集守护…...

破解升腾c10,改造成下载机(第二篇:获取xterm终端)

当c10刷好华为ct3100系统后&#xff0c;就开始获取xterm终端&#xff0c;然后再安装entware. 第一步&#xff1a;获取xterm终端。 点击桌面左下角的工具图标 再点browser 输入百度网址&#xff0c;访问&#xff01; 然后再将网页另存为&#xff5e;&#xff5e;&#xff5e;…...

浏览器多开

使用浏览器的用户功能&#xff0c;创建多个用户即可完成浏览器多开的需求&#xff0c;插件等相对独立 需要命名 然后就可以通过多个用户切换来实现多开了&#xff0c;不同任务选择不同用户...

使用Python实现的音符生成和节拍器程序

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **摘要****先决条件****设置**生成音符频率播放音符节拍器合并结论摘要 节拍器和随机音符生成器各有用途,但单独使用时功能有限。本…...

【生活相关-日语-日本-东京-留学生-搬家后或新入驻-水道局申请饮用水(1)-办理手续】

【生活相关-日语-日本-东京-搬家后-水道局申请饮用水-办理手续】 1、前言2、情况说明&#xff08;1&#xff09;他人代办&#xff08;2&#xff09;打电话&#xff08;3&#xff09;网络申请&#xff08;4&#xff09;你将会面临什么&#xff0c;主要步骤&#xff08;5&#xf…...

PyTorch模型构造实战:从基础到复杂组合

本文通过多个示例演示如何使用PyTorch构建不同类型的神经网络模型&#xff0c;涵盖基础多层感知机、自定义块、顺序块以及复杂组合模型。所有代码均附带输出结果&#xff0c;帮助读者直观理解模型结构。 1. 多层感知机&#xff08;MLP&#xff09; 使用nn.Sequential快速构建一…...

【高性能缓存Redis_中间件】一、快速上手redis缓存中间件

一、铺垫 在当今的软件开发领域&#xff0c;消息队列扮演着至关重要的角色。它能够帮助我们实现系统的异步处理、流量削峰以及系统解耦等功能&#xff0c;从而提升系统的性能和可维护性。Redis 作为一款高性能的键值对数据库&#xff0c;不仅提供了丰富的数据结构&#xff0c;…...

并发编程--互斥锁与读写锁

并发编程–互斥锁与读写锁 文章目录 并发编程--互斥锁与读写锁1. 基本概念2. 互斥锁2.1 基本逻辑2.2 函数接口2.3示例代码12.4示例代码2 3. 读写锁3.1 基本逻辑3.2示例代码 1. 基本概念 互斥与同步是最基本的逻辑概念&#xff1a; 互斥指的是控制两个进度使之互相排斥&#x…...

Linux下Docker安装超详细教程(以CentOS为例)

前言 Docker 已成为现代应用开发和部署的标配工具。本教程将手把手教你 在 CentOS 系统上安装 Docker&#xff0c;涵盖从环境准备到验证安装的全流程&#xff0c;并解决常见问题。无论你是运维工程师还是开发者&#xff0c;均可快速上手。 一、环境要求 操作系统 CentOS 7 或更…...

Ubuntu 服务器版本 设置socket服务(Python)

1. 确定 Socket 类型 Socket 服务可以是: 网络 Socket:基于 TCP/UDP 协议(如 Web 服务器、API 服务)。 Unix Domain Socket:本地进程间通信(如 Docker、MySQL 默认使用)。 2. 编写一个简单的 Socket 服务示例(Python) 以 Python 为例,创建一个 TCP Socket 服务:…...

对于GAI虚假信息对舆论观察分析

摘要 生成式人工智能&#xff08;Generative Artificial Intelligence, GAI&#xff09;的技术革新重构了信息生产机制&#xff0c;但也加剧了虚假信息对舆论生态的异化风险。 关键词&#xff1a;生成式人工智能、虚假信息、舆论异化、智能治理 一、生成式人工智能虚假信息下…...

HTTP:三.HTTP连接

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是互联网上最常用的协议,用于在客户端和服务器之间传输数据。HTTP协议通常用于从Web服务器传输网页和文件到客户端浏览器,并支持其他用途,如传输API数据和传输文件。 HTTP连接是指客户端向服务…...

hyper-v server服务器部署远程访问(我目前环境:hyper-v服务器+路由器+公网ip)

Hyper-v server部署(裸金属方式) 系统镜像下载安装# 下载地址:17763.737.190906-2324.rs5_release_svc_refresh_SERVERHYPERCORE_OEM_x64FRE_zh-cn_1.iso 安装的过程很简单,和安装Windows操作系统没啥区别,这里就不记录了。 安装过程可参考:安装Hyper-v Server 2016 部…...

MCP遇见Web3:从边缘计算到去中心化的无限想象

MCP遇见Web3:从边缘计算到去中心化的无限想象 在数字化转型的浪潮中,边缘计算(MCP,Micro Control Protocol)和Web3技术分别在计算效率与去中心化架构上发挥着各自的优势。当两者融合,会碰撞出哪些火花?作为一名技术极客,我最近开始深度研究MCP与Web3工具的集成,试图探…...

【HarmonyOS Next之旅】DevEco Studio使用指南(十三) -> ArkTS/TS代码重构

目录 1 -> Refactor-Extract代码提取 2 -> Refactor-Convert代码转换 3 -> Refactor-Rename代码重命名 4 -> Move File 5 -> Safe Delete 1 -> Refactor-Extract代码提取 在编辑器中支持将函数内、类方法内等区域代码块或表达式&#xff0c;提取为新方…...

STM32 HAL DHT11驱动程序

DHT11驱动程序会占用TIM3定时器&#xff0c;进行高精度延时。程序共包含4个文件 DHT11.c DHT11.h delay.c delay.h DHT11.c #include "stm32f1xx_hal.h" #include "dht11.h" #include "delay.h" // 添加延时头文件 #define DHT_PORT GPIOB…...

asm汇编源代码之文件操作相关

提供7个子程序:   1. 关闭文件 FCLOSE   2. 打开文件 FOPEN   3. 文件大小 FSIZE   4. 读文件 FREAD   5. 写文件 FWRITE   6. 建立文件 FCREATE   7. 读取或设置文件指针 FPOS 具体功能及参数描述如下 ; ---------------------------- FCLOSE PROC  FAR ; IN…...

Github 2025-04-12 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-04-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2uv: 极快的Python软件包安装程序和解析器 创建周期:147 天开发语言:Rust协议类型:Apache License 2.0Star数量:7…...

JAVA学习-练习试用Java实现“实现一个Java程序,对大数据集中的数据进行类型转换”

问题&#xff1a; 实现一个Java程序&#xff0c;对大数据集中的数据进行类型转换。 解答思路&#xff1a; 在Java中&#xff0c;对大数据集中的数据进行类型转换通常意味着将一种数据类型转换为另一种数据类型。以下是一个简单的Java程序示例&#xff0c;它演示了如何对大数据集…...

Android基础彻底解析-APK入口点,xml,组件,脱壳,逆向

第一章:引言与背景 Android逆向工程,作为一种深入分析Android应用程序的技术,主要目的就是通过分析应用的代码、资源和行为来理解其功能、结构和潜在的安全问题。它不仅仅是对应用进行破解或修改,更重要的是帮助开发者、研究人员和安全人员发现并解决安全隐患。 本文主要对…...

Spark RDD算子详解:从入门到精通

一、前言 在大数据处理领域&#xff0c;Apache Spark凭借其高效的内存计算能力&#xff0c;成为了流行的分布式计算框架。RDD&#xff08;Resilient Distributed Dataset&#xff09;是Spark的核心概念之一&#xff0c;它是一个分布式的数据集合&#xff0c;提供了丰富的操作接…...

Bootstrap4 卡片

Bootstrap4 卡片 Bootstrap 是一个流行的前端框架&#xff0c;它提供了丰富的组件和工具&#xff0c;使得开发者可以快速构建响应式、美观的网页。其中&#xff0c;Bootstrap4 中的卡片组件&#xff08;Card&#xff09;是一个非常实用的功能&#xff0c;可以用来展示图片、文…...

【随行付-注册安全分析报告-无验证方式导致隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

深入解析Antogen意图识别模型:从原理到实践

一、意图识别基础概念 1.1 什么是意图识别 意图识别(Intent Recognition)是自然语言处理(NLP)中的核心任务&#xff0c;旨在确定用户输入背后想要表达的目的或行动请求。它是对话系统理解用户的第一步&#xff0c;直接影响后续的对话管理和响应生成质量。 关键特征&#xff…...

企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神

RAG挑战赛是什么&#xff1f; 任务是基于企业年报构建问答系统。比赛日的流程简而言之&#xff1a; 解析阶段&#xff1a;获得100份随机企业的年报&#xff08;PDF格式&#xff0c;每份最多1000页&#xff09;&#xff0c;限时2.5小时完成解析并构建数据库。问答阶段&#xf…...

深入理解 HTML5 语义元素:提升网页结构与可访问性

引言 在构建网页的过程中&#xff0c;合理的结构与清晰的语义对于网页的质量、可维护性以及搜索引擎优化&#xff08;SEO&#xff09;都至关重要。HTML5 引入了一系列语义元素&#xff0c;为开发者提供了更精准描述网页内容的工具。本文将深入探讨 HTML5 语义元素的作用、使用…...

DeepSeek vs Grok vs ChatGPT:三大AI工具优缺点深度解析

一、DeepSeek&#xff1a;低成本与中文专精的本地化AI 优点 中文处理能力卓越 DeepSeek针对中文语法和文化背景进行了深度优化&#xff0c;尤其在古文翻译、诗歌创作和技术文档生成中表现突出&#xff0c;远超ChatGPT的中文支持能力。高效推理与低成本 采用混合专家&#xff…...

MCP(模型上下文协议)简单案例

MCP&#xff08;模型上下文协议&#xff09;的标准化接口 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是由Anthropic开发的一种开放协议&#xff0c;旨在标准化大型语言模型&#xff08;LLM&#xff09;与外部数据源和工具的交互方式1。它就…...

BGP基础概念与核心架构

一、BGP 协议定义与定位 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09; 是互联网中唯一的域间路由协议&#xff08;EGP&#xff09;&#xff0c;用于在不同自治系统&#xff08;AS&#xff09;之间交换路由信息。与 OSPF、IS-IS 等域内路由协议…...

【经济保护主义叙事】

第一层&#xff1a;表面逻辑——经济保护主义叙事 公开理由&#xff1a;特朗普宣称加征关税是为了“保护美国制造业”“减少贸易逆差”“维护国家安全”&#xff0c;并强调通过关税迫使贸易伙伴降低壁垒&#xff0c;促进产业链回流美国。 底层逻辑&#xff1a;通过民族主义叙事…...

遵循IEC 62304:构建安全可靠的医疗器械软件

目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级&#xff08;Software Safety Classification&#xff09; &#xff08;1&#xff09;分级标准 &#xff08;2&#xff09;分级依据 &#xff08;3&#xff09;验证要求 2. 软件…...

ARM 架构下 spin_lock 实现

阅读该文章前&#xff0c;需要对原子指令有所了解&#xff0c;推荐阅读 聊一聊原子操作和弱内存序 1、概念 内核当发生访问资源冲突的时候&#xff0c;可以有两种锁的解决方案选择&#xff1a; 一个是原地等待一个是挂起当前进程&#xff0c;调度其他进程执行&#xff08;睡眠…...

计算机视觉算法实现——SAM实例分割:原理、实现与应用全景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一&#xff0c…...

asm汇编字符串操作

提供8个子程序: 1. 字符串长度 STRLEN 2. 字符串替换 REPLACE 3. 字节查找 SEARCHB 4. 双字节查找 SEARCHW 5. 输入字符串 GETSTR 6. 输出字符串 OUTSTR 7. 复制字符串 COPYSTR 8. 查找字符串 SRCHSTR 具体功能及参数描述如下 STRLEN PROC  FAR ; IN: ;   DS:DXSTRING ;…...

[MSPM0开发]之三MSPM0G3507之时钟系统

一、MSPM0G3507时钟模块概述 MSPM0G3507的时钟系统隶属于其电源管理和时钟单元 (PMCU) 。 PMCU主要负责电源管理、时钟配置和复位控制功能。 时钟模块包含内部和外部 振荡器 oscillators、 时钟监测器 clock monitors以及时钟选择和控制逻辑。 提供了频率时钟计数器frequency …...

如何绕过WAF实现SQL注入攻击?​

引言​​ 在渗透测试中&#xff0c;SQL注入&#xff08;SQLi&#xff09;始终是Web安全的核心漏洞之一。然而&#xff0c;随着企业广泛部署Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;传统的注入攻击往往会被拦截。本文将分享一种​​绕过WAF检测的SQL注入技巧​​…...