static <T> ItemWithAddress<T> readItemFromSection(Program program, MemoryBlock memBlock,
			ReaderFunc<T> readFunc) {
		if (memBlock != null) {
			try (ByteProvider bp =
				MemoryByteProvider.createMemoryBlockByteProvider(program.getMemory(), memBlock)) {
				BinaryReader br = new BinaryReader(bp, !program.getMemory().isBigEndian());

				T item = readFunc.read(br, program);
				return item != null ? new ItemWithAddress<>(item, memBlock.getStart()) : null;
			}
			catch (IOException e) {
				Msg.warn(GoBuildId.class,
					"Unable to read GoBuildId in section: %s".formatted(memBlock.getName()), e);
			}
		}
		return null;
	}
Attempts to read a GoBuildId from the specified InputStream (useful for early compiler
detection before file is loaded).

@param is {@link InputStream} providing access to the ".text" section of a PE binary 
@return GoBuildId instance, or null if not present
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/GoBuildId.java