- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
ID: go-best-practices/errors-new-errorf
Language: Go
Severity: Info
Category: Best Practices
However, it is preferable to use fmt.Errorf("something %s", foo)
instead of errors.New(fmt.Sprintf("something %s", foo))
.
Here are a few reasons why:
fmt.Errorf
function simplifies the error message creation by combining the formatting and error wrapping in one function call. It automatically prefixes the error message with the location information, including the file name and line number, which aids in debugging. In contrast, using errors.New(fmt.Sprintf("something %s", foo))
requires an extra step of formatting the string separately before creating the error.fmt.Errorf
, developers maintain a uniform approach to error handling and can easily recognize and handle errors throughout the codebase. Using a single idiomatic method rather than mixing different styles ensures consistency and improves code readability and maintainability.fmt.Errorf
provides additional context information for debugging purposes by including the file name and line number where the error was generated. This context can be invaluable in identifying the source of an error quickly and accurately. The errors.New
approach lacks this valuable context information.errors
package, allowing for richer error handling. By using fmt.Errorf
, you can take advantage of this feature, which allows you to wrap errors with additional contextual information. This information provides a hierarchical error structure, which is useful for understanding error causes and propagation.To summarize, utilizing fmt.Errorf
over errors.New(fmt.Sprintf("something %s", foo))
is preferred due to its simplicity, consistency, improved error messages, and the ability to leverage error wrapping capabilities introduced in Go 1.13. By conforming to best practices, developers can write cleaner and more maintainable error handling code.
func myFunc() error {
foo := "foo"
return errors.New(fmt.Sprintf("error: %s", foo))
}
func myFunc() error {
foo := "foo"
return fmt.Errorf("error: %s", foo)
}