loader/cache.go
func (c *FileCache) Get(key string) (*CacheEntity, error) {
	path := c.GetCachePath(key)

	// Need to avoid race condition
	file, err := os.Open(path)
	if err != nil {
		return nil, errors.Wrap(err, "failed to open cache file '"+path+"'")
	}
	defer file.Close()

	var entity CacheEntity
	dec := gob.NewDecoder(file)
	if err = dec.Decode(&entity); err != nil {
		return nil, errors.Wrap(err, "failed to gob decode from cache file '"+path+"'")
	}

	return &entity, nil
}
func (c *FileCache) Get(key string) (*CacheEntity, error) {
	path := c.GetCachePath(key)

	// Need to avoid race condition
	file, err := os.Open(path)
	if err != nil {
		return nil, errors.Wrap(err, "failed to open cache file '"+path+"'")
	}
	defer file.Close()

	var entity CacheEntity
	dec := gob.NewDecoder(file)
	if err = dec.Decode(&entity); err != nil {
		return nil, errors.Wrap(err, "failed to gob decode from cache file '"+path+"'")
	}

	return &entity, nil
}
// Get returns the cached vm.ByteCode, if available