Go小技巧易錯點100例(三十)

本期分享:

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和…