go-function-analysis
Go Function Analysis
Overview
This skill analyzes all Go functions in a workspace and generates:
- A complete list of functions with their line counts and maximum call depths
- Statistical analysis (p50, p90, p99 percentiles)
When to Use
Use this skill when:
- Auditing code complexity in a Go project
- Identifying long functions that may need refactoring
- Generating code metrics for documentation
- Reviewing function size distribution
How to Execute
Step 1: Find All Go Files
Find all .go files in the workspace, excluding common dependency directories:
find . -name "*.go" -type f ! -path "./vendor/*" ! -path "./.git/*" ! -path "*_test.go"
Step 2: Extract Functions and Calculate Lengths
For each .go file, use the helper script to extract function information:
./scripts/analyze_functions.sh <workspace_path>
Or manually parse using this approach for each file:
- Find all function declarations with line numbers
- For each function, count lines from
funcdeclaration to matching closing brace - Record: file path, function name, start line, end line, total lines
Step 3: Calculate Percentiles
Given all function lengths sorted ascending:
- p50 (median): Value at position
count * 0.50 - p90: Value at position
count * 0.90 - p99: Value at position
count * 0.99
Step 4: Generate README.function.md
Create README.function.md in the workspace root with this format:
# Go Function Analysis
Generated: YYYY-MM-DD
## Summary Statistics
| File Path | Function Name | Function Lines | Depth Level | Percentile |
| --------- | ------------- | -------------- | ----------- | ---------- |
| path/to/f | funcName | X | Y | p50 |
| ... | ... | ... | ... | ... |
**Total functions:** N
**Average length:** X lines
## All Functions (sorted by length, descending)
| File Path | Function Name | Function Lines | Depth Level |
| --------- | ------------- | -------------- | ----------- |
| path/to/f | funcName | X | Y |
| ... | ... | ... | ... |
Manual Analysis Approach
If the script is not available, follow these steps:
Finding Functions in Go
Go functions are declared with:
func FunctionName(params) returnType {
// body
}
func (receiver Type) MethodName(params) returnType {
// body
}
Counting Lines
For each function:
- Start from the
funckeyword line - Count until the matching closing
} - Include the
funcand}lines in the count
Example
func example() { // Line 1
fmt.Println() // Line 2
if true { // Line 3
doSomething()// Line 4
} // Line 5
} // Line 6
This function has 6 lines.
Important Notes
[!NOTE] Only analyze
.gofiles within the workspace. Exclude/vendor/,/.git/, and external dependencies.
[!TIP] Functions over 50 lines may be candidates for refactoring. p90+ functions often warrant closer review.
More from bizshuk/llm_plugin
character-profile-generator
This skill generates detailed virtual character profiles based on a standardized template. Use this skill when a user wants to create or refine a character for stories, roleplay, or virtual assistants. It guides the user through a clarifying dialogue to establish core personality, behavior, and background before generating the final profile.
25project-metadata
Project metadata update
21security scanner
Scan workspace for potential security risks including exposed passwords, API keys, tokens, and other sensitive data
20social-buisiness-explore
Explore niche markets, generate viral content ideas, write scripts, plan 30-day calendars, monetization, and automation.
7private network security scan
Run a private network security scan, diagnose all discovered hosts against 11 risk categories, and generate a security report within 60 minutes
6celebrity quotes
Generate 5 inspirational quotes from a given celebrity with context and images.
5