This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project, feel free to reach out to us!

Metadata

ID: go-best-practices/omit-default-slice-index

Language: Go

Severity: Warning

Category: Best Practices

Description

In Go, the expression s[n:len(s)] is used to slice a string or slice s starting from index n up to the end of s. However, it is considered suboptimal and can be replaced with the simpler and more expressive s[n:] notation.

Using s[n:len(s)] is not optimal for a few reasons:

  1. Readability: The s[n:] notation provides a clearer and more concise representation of slicing from index n to the end of s. It eliminates the need to explicitly specify len(s), making the code more readable.
  2. Simplicity: By using s[n:], you remove unnecessary redundancy in the code. It improves the simplicity of your code and reduces the chances of introducing errors when manually specifying the length of s.
  3. Performance: Although the performance difference may be negligible, using s[n:] is more efficient than creating a len(s) expression. The s[n:] notation directly references the underlying slice without requiring an additional length calculation.

For example, let’s consider the following code snippets:

s := "Hello, World!"
fmt.Println(s[7:len(s)])

Output: “World!”

s := "Hello, World!"
fmt.Println(s[7:])

Output: “World!”

Both snippets will produce the same output, but the second one using s[7:] is preferred for its simplicity and readability.

By replacing s[n:len(s)] with s[n:], you can improve the clarity and maintainability of your code while still achieving the desired slicing functionality.

Non-Compliant Code Examples

func main() {
    d := s[n:len(s)]
}

Compliant Code Examples

func main() {
    d := s[n:]
}
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Seamless integrations. Try Datadog Code Analysis

PREVIEWING: mervebolat/span-id-preprocessing