A generic helper can work with slices that hold different element types.

Slice Helper

slice_helper.go
package main

import "fmt"

// Generic shape: Last[T any](items []T) T
func LastString(items []string) string {
	return items[len(items)-1]
}

func main() {
	var extra = 
	names := []string{"ada", "grace", extra}
	last := LastString(names)

	fmt.Println("count=", len(names))
	fmt.Println("last=", last)
	fmt.Println("same=", last == extra)
}
package main

import "fmt"

// Generic shape: Last[T any](items []T) T
func LastString(items []string) string {
	return items[len(items)-1]
}

func main() {
	var extra = 
	names := []string{"ada", "grace", extra}
	last := LastString(names)

	fmt.Println("count=", len(names))
	fmt.Println("last=", last)
	fmt.Println("same=", last == extra)
}
package main

import "fmt"

// Generic shape: Last[T any](items []T) T
func LastString(items []string) string {
	return items[len(items)-1]
}

func main() {
	var extra = 
	names := []string{"ada", "grace", extra}
	last := LastString(names)

	fmt.Println("count=", len(names))
	fmt.Println("last=", last)
	fmt.Println("same=", last == extra)
}
generic slice Generic slice helpers reuse the same indexing and length logic across element types. The trace uses a concrete string slice and shows the generic shape in a comment.