Use os.ReadFile to read an entire file from the filesystem into a byte slice, and use io.ReadAll to read all data from any io.Reader (like a network connection, archive entry, or pipe) into a byte slice. os.ReadFile is a convenience wrapper that opens the file, reads it, and closes it, while io.ReadAll only handles the reading part of an already-open stream.
// Read a file from disk
content, err := os.ReadFile("config.json")
// Read data from an io.Reader (e.g., a tar entry or network stream)
reader := getReader() // returns io.Reader
data, err := io.ReadAll(reader)