You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go编译器是否有类似rustc -Z self-profile的自剖析参数?

如何测量Go编译各阶段耗时及单独测试解析阶段性能

一、Go编译器内置的阶段耗时统计(类似rustc -Z self-profile)

Go官方编译器gc提供了直接的参数来查看编译各阶段的耗时:

  • 使用go build/go run配合-gcflags="-time"参数,可输出编译器前端(parse、类型检查等)和后端(代码生成、优化等)各阶段的耗时:
    go build -gcflags="-time" ./your/package
    
  • 若需查看完整构建流程的命令及对应时间,添加-x参数即可:
    go build -x -gcflags="-time" ./your/package
    
  • 直接调用底层编译工具go tool compile,用-time参数能获得更精细的阶段耗时数据,涵盖parse、typecheck、ssa、codegen等核心环节:
    go tool compile -time your_file.go
    

二、用go/parser单独测量解析阶段耗时

如果只想单独测试Go代码的解析阶段性能,可借助标准库go/parser配合time包实现计时,示例代码如下:

package main

import (
	"fmt"
	"go/parser"
	"go/token"
	"os"
	"time"
)

func main() {
	if len(os.Args) != 2 {
		fmt.Println("usage: parse-tester <go-file-path>")
		os.Exit(1)
	}

	filePath := os.Args[1]
	fset := token.NewFileSet()

	start := time.Now()
	_, err := parser.ParseFile(fset, filePath, nil, parser.AllErrors)
	duration := time.Since(start)

	if err != nil {
		fmt.Printf("parse failed: %v\n", err)
		os.Exit(1)
	}

	fmt.Printf("parse stage took: %v\n", duration)
}

编译运行后传入目标Go文件路径,就能得到纯解析阶段的耗时:

go build -o parse-tester parse-tester.go
./parse-tester your_source.go

注:这种方式仅测量纯解析环节的耗时,不包含编译器后续的类型检查、语义分析等步骤。

内容的提问来源于stack exchange,提问作者Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:55:59