public <T extends DataType> T getGhidraDataType(GoType typ, Class<T> clazz, boolean cacheOnly)
			throws IOException {
		if (typ == null) {
			return null;
		}
		if (typ instanceof GoTypeBridge typeBridge) {
			DataType dt = typeBridge.recoverDataType(this);
			return clazz.isInstance(dt) ? clazz.cast(dt) : null;
		}
		TypeRec rec = getTypeRec(typ);
		if (rec.recoveredDT == null && !cacheOnly) {
			rec.recoveredDT = typ.recoverDataType(this);
		}
		DataType dt = rec.recoveredDT;
		if (clazz.isInstance(dt)) {
			return clazz.cast(dt);
		}
		else if (dt != null) {
			Msg.warn(this, "Failed to get Ghidra data type from go type: %s[%x]".formatted(
				rec.name, rec.type.getStructureContext().getStructureStart()));
		}
		return null;
	}
Returns a {@link DataType Ghidra data type} that represents the {@link GoType golang type}, 
using a cache of already recovered types to eliminate extra work and self recursion.
 
@param typ the {@link GoType} to convert
@return Ghidra {@link DataType}
@throws IOException if golang type struct is not a valid struct mapped instance
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoTypeManager.java