Go Runtime Metrics Total CPU Explanation: go_cpu_classes_total_cpu_seconds_total
This blog explains how the Go runtime metrics /cpu/classes/total:cpu-seconds
is calculated. Go1.22.7 is used as source code reference.
This blog explains how the Go runtime metrics /cpu/classes/total:cpu-seconds
is calculated. Go1.22.7 is used as source code reference.
Go standard library provides os pacakge to trackle with os related concepts, for example, the working dir. Working dir is a os level concept rather than a concept maintained by os package. Indeed, os package doesn't reinvent the wheel but rely on the operation system to tackle it.
Working dir is a concept for a process rather than an executable. So statement "the working dir of binary ./bin/server is ~/workspace/server" is totally wrong.
This is a reading note to summarise the build list and dependency requirements of minimal version selection of go. If you want to learn more about minimal version select(MVS), please read the documentation and design docs below.
In short, MVS produces the build list as output, the list of module versions used for a build. The "minimal" in MVS means it selects the minimal version of each module that satisfies all requirements, instead of automatically choosing the highest available version. For example, if the requirements are "v1.1, v1.2, v1.3", the version v1.3 is the minimal version that satisfies all requirements. According to the MVS, v1.3 is selected.
Last week, users have reported a weird issue because they found:
This issue is complicated due to the involved components and the cross services. It takes me a lot of time to troubleshoot and finally I found the root cause successfully. The issue happened because user used gin.Context
as context.Context
directly inside a spawned go routine, however, gin tries to reuse the gin.Context
for another request. As a result, the go routine spawned by previous request will be affected by the new request, and the request id mingles.
Recently, I have help to troubleshooting the Go type alias issue inside packages.Load
, which relates x/tools
, go list
and cmd/compile
. My original CL is correct, but I got confused when I found the exportdata contains all aliases regardless gotypealias
setting. Then, tim has shepherded my CL by another CL to fix it.
Feel a bit frustrated when I saw the email when I got up. But it helps me a lot to learn how go toolchain and cmd/compile
works. Think twice before you act!