本期分享:

1.切片共享底层数组

2.获取Go函数的注释


切片共享底层数组

在Go语言中,切片和数组是两种不同的元素,但是切片的底层是数组,并且还有一个比较重要的机制:切片共享底层数组

下面这段代码演示了切片(Slice)的底层数组共享机制,以及修改一个切片对其他相关切片和原数组的影响:

func TestSlice(t *testing.T) {// 定义原始切片original := []int{1, 2, 3, 4, 5} // -> original: [1 2 3 4 5]slice1 := original[1:4] // -> slice1: [2 3 4]slice2 := original[2:] // -> slice2: [3 4 5]// 修改slice1的第一个元素(会影响底层数组和其他切片)slice1[0] = 100// 打印结果fmt.Println(original) // [1 100 3 4 5]fmt.Println(slice2)   // [3 4 5]
}

上面我们说明了一个结论就是,Go语言中的切片是底层数组的视图,多个切片可以共享同一个底层数组。 当通过 original[1:4]original[2:] 创建新切片时:

slice1 的底层数组从 original 的索引 1 开始,包含元素 [2, 3, 4]

slice2 的底层数组从 original 的索引 2 开始,包含元素 [3, 4, 5]

当通过slice1[0] = 100修改切片时,直接修改了底层数组,导致 original 变为 [1, 100, 3, 4, 5]

切片共享底层数组的特性,修改一个切片的元素可能会影响其他切片或原数组,具体取决于修改的位置是否在共享范围内。理解这一机制对避免意外的副作用至关重要。

获取Go函数的注释

获取Go语言的注释主要用于自动化生成文档(如通过godoc生成API文档)、存储代码元数据(如Swagger规范的路由信息)、指导代码生成工具(如go generate指令)、辅助静态分析(如lint规则例外标记)以及标识测试示例,从而提升代码可读性、维护性及开发效率,实现文档与代码的同步更新。

下面这段代码演示了如何使用 Go 的抽象语法树 (AST) 解析工具来提取特定函数的注释:

func main() {// 创建文件集fset := token.NewFileSet()dir, err := os.Getwd()if err != nil {panic(err)}// 解析当前文件f, err := parser.ParseFile(fset, "main.go", nil, parser.ParseComments)if err != nil {panic(err)}// 遍历AST节点ast.Inspect(f, func(n ast.Node) bool {// 查找函数声明fn, ok := n.(*ast.FuncDecl)if ok && fn.Name.Name == "TestFunc" {// 打印函数注释if fn.Doc != nil {for _, comment := range fn.Doc.List {fmt.Println(comment.Text)}}}return true})
}// TestFunc
// @param null
// @return error
// @return int
func TestFunc() {}

输出

// TestFunc
// @param null
// @return error
// @return int

注意:Go 的文档注释 (///* */) 需紧贴函数声明。若注释与函数之间有空行,则不会被关联到 fn.Doc

Go 的 AST 解析工具提取特定函数的注释,核心步骤包括:

  1. 解析文件生成 AST。
  2. 遍历 AST 节点定位目标函数。
  3. 提取并打印注释内容。

理解此代码有助于实现自动化文档生成、代码分析等高级功能。

本篇结束~

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反转字符串2

reverse函数的用法(reverse一般是左闭右开区间): 1.反转数组: int arr[] {1, 2, 3, 4, 5}; int n sizeof(arr) / sizeof(arr[0]); // 反转数组arr的全部元素 reverse(arr, arr n); 2.反转字符串: string str "he…

企业可用免费软件 | 7-Zip,压缩率比 WinZip 高10%!

7-Zip是一款出色的文件压缩和存档工具,但实际上许多小伙伴们并不了解。它是一款开源的免费软件,目前支持87种语言,适用于所有系统,软件操作界面也十分简洁,大部分代码都在GNU LGPL许可下。除了免费无广告的优点之外&am…

Gradio全解20——Streaming:流式传输的多模态应用(1)——Mistral-7B实现流式传输音频:魔力8号球

Gradio全解20——Streaming:流式传输的多模态应用(1)——Mistral-7B实现流式传输音频:魔力8号球 前言本篇摘要20. Streaming:流式传输的多模态应用20.1 Mistral-7B实现流式传输音频:魔力8号球20.1.1 工作原…

Qt实现网页内嵌

文章目录 一、环境准备 二、代码实现 三、测试 一、环境准备 首先,确保你的Qt安装包含了QtWebEngine模块。我的Qt是5.12.9并且使用MSVC来编译项目。在项目文件中需要添加以下配置,其中在Qt中配置MSVC,建议去看看这位大佬的博客&#xff1a…

conda管理python环境

其他文章 服务容错治理框架resilience4j&sentinel基础应用---微服务的限流/熔断/降级解决方案-CSDN博客 conda管理python环境-CSDN博客 快速搭建对象存储服务 - Minio,并解决临时地址暴露ip、短链接请求改变浏览器地址等问题-CSDN博客 大模型LLMs的MCP入门-…

Android工厂模式

前言 工厂模式是创建型模式,使我们常用/常见的模式之一。多用于需要生成复杂对象的地方。用new就可以完成创建的对象就无需使用。工厂模式降低了对象之间的耦合度,由于工厂模式依赖抽象的架构,实例化的任务交由子类去完成,所以有…

【AI面试准备】数据驱动测试思维与实践指南

面试题:数据驱动思维 构建测试数据集:收集代码覆盖率、缺陷历史等数据。 模型训练优化:使用Jupyter Notebook分析特征重要性。 数据驱动思维是一种以数据为核心、基于数据分析结果进行决策的方法论。它强调通过量化分析、模式识别和预测建模…

内存碎片深度剖析

目录 什么是内存碎片 内部碎片的解决 malloc STL二级空间配置器 外部碎片的解决 伙伴系统算法 slab分配器 什么是内存碎片 内存碎片是指在内存中存在的一些不连续的、较小的空闲内存块,这些小块内存由于太小而无法被有效地分配给程序使用,从而导…

flutter 专题 六十一 支持上拉加载更多的自定义横向滑动表格

在股票软件中,经常会看到如下所示的效果(ps:由于公司数据敏感,所以使用另一个朋友的一个图)。 分析需要后,我先在网上找了下支持横向滑动的组件,最后找到了这个:flutter_horizontal…

0-1背包问题基础概念

一、问题描述 给定一个容量为 W 的背包和 n 个物品。每个物品有一个重量 w[i] 和价值 v[i]。每个物品只能选或不选(即“0-1”),求在不超过背包容量的前提下,所能获得的最大总价值。 输入: 背包容量 W(in…

使用 Semantic Kernel 快速对接国产大模型实战指南(DeepSeek/Qwen/GLM)

文章目录 使用 Semantic Kernel 快速对接国产大模型实战指南(DeepSeek/Qwen/GLM)一、引言二、环境准备2.1 开发环境2.2 模型服务配置 三、核心代码实现3.1 会话代码封装3.2 CurModelContext封装3.3 DeepSeek对接示例3.4 Qwen对接示例3.5 GLM对接示例 四、…

Ai时代,运维人如何转型

在AI时代,传统运维向智能运维(AIOps)的转型需要系统性重塑,以下是深度拆解的转型路线图和关键实施要素: 一、认知升级范式转变 1. 演进路线模型(三阶段) 被动响应阶段:人工巡检(→监控覆盖率<30%)主动防御阶段:规则引擎(→告警准确率70%~85%)预测自治阶段:深…

windows鼠标按键自定义任意设置

因为用惯了Linux的鼠标中键的复制黏贴&#xff0c;发现windows下有完全可以实现类似自定义功能的软件&#xff0c;推荐一下&#xff1a; X Mouse Button Control。 免费版足够好用。 软件简介&#xff1a; X Mouse Button Control是一款专业的重新映射鼠标按钮的软件工具&…

怎么看户型好不好?

看房型好不好可从以下方面判断&#xff1a; 空间布局 方正性&#xff1a;户型方正为佳 &#xff0c;此时进深与开间比例在1:1.5左右。方正户型空间利用率高&#xff0c;无采光死角。如手枪型、锯齿型等异形户型&#xff0c;易有拐角、长过道&#xff0c;空间浪费大。动静分区…

基于WOA鲸鱼优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matlab2024b 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频…

JAVA简单走进AI世界~Spring AI

1、背景 现代 AI 正以前所未有的速度改变着世界。它是基于复杂算法和强大计算能力的技术体系,涵盖了机器学习、深度学习、自然语言处理等多个领域。 在日常生活中,AI 广泛应用于智能语音助手、图像识别、推荐系统等。比如,智能音箱能理解并回应语音指令,为人们提供信息查…

stm32wb55rg (4) 启用usart串口

code repo: 访问gitee 上节课成功点亮了LED&#xff0c;这次来把usart 用起来&#xff0c;毕竟有交互才是系统。 技术准备 首先查看手册&#xff0c;发现mcu有1个usart和1个 lpuart。 usart 的使用需要两个pin&#xff0c;一个接收一个发送。继续查看pin and ball definition…

Python生活手册-NumPy数组创建:从快递分拣到智能家居的数据容器

一、快递分拣系统&#xff08;列表/元组转换&#xff09; 1. 快递单号录入&#xff08;np.array()&#xff09; import numpy as np快递单号入库系统 快递单列表 ["SF123", "JD456", "EMS789"] 快递数组 np.array(快递单列表) print(f"…

数据库-数据类型,表的约束和基本查询操作

一、数值类型 1. 整数类型 类型字节有符号范围无符号范围操作注意事项TINYINT1-128 ~ 1270 ~ 255默认有符号&#xff0c;UNSIGNED定义无符号SMALLINT2-32768 ~ 327670 ~ 65535无符号需显式声明INT4-2^31 ~ 2^31-10 ~ 2^32-1推荐优先使用INTBIGINT8-2^63 ~ 2^63-10 ~ 2^64-1存…

【C语言编译】编译原理和详细过程

文章目录 1. C 语言编译原理和详细过程1.1 预处理阶段1.2 编译阶段1.3 汇编阶段1.4 链接阶段 2. 疑问点解析2.1 三地址码是什么&#xff1f;有什么作用2.2 符号表是什么&#xff1f;有何作用2.3 重定位的含义与作用2.3 符号表和重定位在整个编译过程中的作用2.4 动态链接库.so和…