前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >《Go小技巧&易错点100例》第三十篇

《Go小技巧&易错点100例》第三十篇

作者头像
闫同学
发布2025-03-28 17:14:46
发布2025-03-28 17:14:46
3500
代码可运行
举报
文章被收录于专栏:扯编程的淡扯编程的淡
运行总次数:0
代码可运行
本期分享:

1.切片共享底层数组

2.获取Go函数的注释

切片共享底层数组

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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) 解析工具来提取特定函数的注释:

代码语言:javascript
代码运行次数:0
运行
复制
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)
             }
            }
        }
        returntrue
    })
}

// TestFunc
// @param null
// @return error
// @return int
func TestFunc() {

}

输出

代码语言:javascript
代码运行次数:0
运行
复制
// TestFunc
// @param null
// @return error
// @return int

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

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

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

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

本篇结束~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 扯编程的淡 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 切片共享底层数组
  • 获取Go函数的注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档