mirror of
https://github.com/gin-gonic/gin.git
synced 2025-12-11 19:47:00 +08:00
test
This commit is contained in:
parent
c221133ee8
commit
94fbdca8a5
219
CONTRIBUTING_GUIDE.md
Normal file
219
CONTRIBUTING_GUIDE.md
Normal file
@ -0,0 +1,219 @@
|
||||
# 🚀 Quick Start Guide to Contributing to Gin
|
||||
|
||||
Welcome! This guide will help you get started contributing to the Gin Web Framework.
|
||||
|
||||
## ✅ Environment Setup Complete
|
||||
|
||||
Your development environment is ready:
|
||||
- **Go Version**: 1.25.0 ✓ (requires 1.24+)
|
||||
- **Dependencies**: All modules verified ✓
|
||||
- **Dev Tools**: golint and misspell installed ✓
|
||||
- **Tests**: All passing (99.1% coverage) ✓
|
||||
|
||||
## 📚 Understanding the Project Structure
|
||||
|
||||
### Core Files
|
||||
- **`gin.go`** - Main engine and router
|
||||
- **`context.go`** - Request/response context handling
|
||||
- **`routergroup.go`** - Route grouping and middleware
|
||||
- **`tree.go`** - High-performance routing tree (radix tree)
|
||||
- **`logger.go`** - Logging middleware
|
||||
- **`recovery.go`** - Panic recovery middleware
|
||||
|
||||
### Important Directories
|
||||
- **`binding/`** - Request data binding (JSON, XML, YAML, forms, etc.)
|
||||
- **`render/`** - Response rendering (JSON, XML, HTML, etc.)
|
||||
- **`internal/`** - Internal utilities (not public API)
|
||||
- **`examples/`** - Usage examples
|
||||
|
||||
## 🎯 How to Contribute
|
||||
|
||||
### 1. Find Something to Work On
|
||||
|
||||
**Good First Issues:**
|
||||
- Check [GitHub Issues](https://github.com/gin-gonic/gin/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
|
||||
- Look for issues labeled "good first issue" or "help wanted"
|
||||
- Browse [Discussions](https://github.com/gin-gonic/gin/discussions) for feature ideas
|
||||
|
||||
**Areas You Can Help:**
|
||||
- 🐛 Fix bugs
|
||||
- 📝 Improve documentation in `docs/doc.md`
|
||||
- ✨ Add new features
|
||||
- 🧪 Improve test coverage
|
||||
- ⚡ Performance optimizations
|
||||
- 🌐 Translate documentation
|
||||
|
||||
### 2. Development Workflow
|
||||
|
||||
**Before Starting:**
|
||||
```bash
|
||||
# Create a new branch for your work
|
||||
git checkout -b feature/my-contribution
|
||||
```
|
||||
|
||||
**Make Your Changes:**
|
||||
```bash
|
||||
# Format your code (required)
|
||||
make fmt
|
||||
|
||||
# Run tests
|
||||
make test
|
||||
|
||||
# Check for common issues
|
||||
make vet
|
||||
|
||||
# Check formatting (CI will run this)
|
||||
make fmt-check
|
||||
|
||||
# Fix misspellings
|
||||
make misspell
|
||||
```
|
||||
|
||||
**Run Specific Tests:**
|
||||
```bash
|
||||
# Test a specific package
|
||||
go test -v ./binding/
|
||||
|
||||
# Test a specific function
|
||||
go test -v -run TestContextQuery
|
||||
|
||||
# Run with race detector
|
||||
go test -race ./...
|
||||
```
|
||||
|
||||
### 3. Code Standards
|
||||
|
||||
**Important Rules:**
|
||||
- ✅ All tests must pass
|
||||
- ✅ Code must be formatted with `make fmt`
|
||||
- ✅ Add tests for new features
|
||||
- ✅ Update `docs/doc.md` for new features (NOT README.md)
|
||||
- ✅ Keep commits focused and atomic
|
||||
- ✅ Squash to max 2 commits before submitting PR
|
||||
|
||||
**Example Test Pattern:**
|
||||
```go
|
||||
func TestMyNewFeature(t *testing.T) {
|
||||
// Setup
|
||||
router := gin.New()
|
||||
|
||||
// Test your feature
|
||||
w := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("GET", "/test", nil)
|
||||
router.ServeHTTP(w, req)
|
||||
|
||||
// Assert
|
||||
assert.Equal(t, 200, w.Code)
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Submit Your PR
|
||||
|
||||
**Checklist:**
|
||||
- [ ] Tests pass locally (`make test`)
|
||||
- [ ] Code is formatted (`make fmt`)
|
||||
- [ ] No linting errors (`make vet`)
|
||||
- [ ] Documentation updated (if needed)
|
||||
- [ ] Commits squashed to ≤2 commits
|
||||
- [ ] PR targets `master` branch
|
||||
- [ ] PR description explains what and why
|
||||
|
||||
**PR Template Will Ask:**
|
||||
- What does this PR do?
|
||||
- Why is this change needed?
|
||||
- How has this been tested?
|
||||
- What issues does it fix? (use `Fixes #123`)
|
||||
|
||||
## 🛠️ Common Development Tasks
|
||||
|
||||
### Running the Examples
|
||||
```bash
|
||||
cd examples/
|
||||
go run <example-name>/main.go
|
||||
```
|
||||
|
||||
### Checking Code Coverage
|
||||
```bash
|
||||
make test
|
||||
# coverage.out file will be generated
|
||||
go tool cover -html=coverage.out
|
||||
```
|
||||
|
||||
### Testing Against Different Go Versions
|
||||
```bash
|
||||
# The project supports Go 1.24+
|
||||
# Make sure your changes work with that version
|
||||
```
|
||||
|
||||
### Debugging Tips
|
||||
```bash
|
||||
# Enable debug mode
|
||||
export GIN_MODE=debug
|
||||
|
||||
# Run with verbose output
|
||||
go test -v -run TestName
|
||||
```
|
||||
|
||||
## 📖 Key Resources
|
||||
|
||||
- **API Docs**: https://pkg.go.dev/github.com/gin-gonic/gin
|
||||
- **User Guides**: https://gin-gonic.com/
|
||||
- **Discussions**: https://github.com/gin-gonic/gin/discussions
|
||||
- **Examples**: https://github.com/gin-gonic/examples
|
||||
|
||||
## 🤔 Getting Help
|
||||
|
||||
**Questions?**
|
||||
- Post in [GitHub Discussions](https://github.com/gin-gonic/gin/discussions)
|
||||
- Use English for all communications
|
||||
- Search existing issues/discussions first
|
||||
|
||||
**Security Issues?**
|
||||
- Email: appleboy.tw@gmail.com
|
||||
- Do NOT post publicly
|
||||
|
||||
## 💡 Contribution Ideas for Beginners
|
||||
|
||||
1. **Documentation Improvements**
|
||||
- Fix typos or unclear explanations
|
||||
- Add code examples
|
||||
- Improve error messages
|
||||
|
||||
2. **Test Coverage**
|
||||
- Add tests for edge cases
|
||||
- Improve test clarity
|
||||
|
||||
3. **Performance Benchmarks**
|
||||
- Add benchmarks for new features
|
||||
- Run: `go test -bench=. -benchmem`
|
||||
|
||||
4. **Code Quality**
|
||||
- Simplify complex functions
|
||||
- Add helpful comments
|
||||
- Improve error handling
|
||||
|
||||
## 🎉 Ready to Contribute!
|
||||
|
||||
**Quick Command Reference:**
|
||||
```bash
|
||||
# Check everything before submitting
|
||||
make fmt # Format code
|
||||
make test # Run tests
|
||||
make vet # Check for issues
|
||||
make misspell # Fix spelling
|
||||
|
||||
# Or check formatting without changing files
|
||||
make fmt-check
|
||||
make misspell-check
|
||||
```
|
||||
|
||||
**Next Steps:**
|
||||
1. Browse issues or discussions for ideas
|
||||
2. Comment on an issue to claim it
|
||||
3. Create your branch and start coding
|
||||
4. Run the checks above
|
||||
5. Submit your PR!
|
||||
|
||||
---
|
||||
|
||||
Thank you for contributing to Gin! Every contribution, no matter how small, helps make Gin better for the entire community. 🙌
|
||||
Loading…
x
Reference in New Issue
Block a user