code: func (v *Vars) Get(th *starlark.Thread, id ID, def starlark.Value) (starlark.Value, error) {
  	if err := v.checkVarsAccess(th, id); err != nil {
  		return nil, err
  	}
  
  	// Return if set. Otherwise auto-set to the default and return the default.
  	if cur := v.lookup(id); cur != nil {
  		return cur.value, nil
  	}
  	if err := v.assign(th, id, def, true); err != nil {
  		return nil, err
  	}
  	return def, nil
  }
docs: // Get returns the value of a variable, auto-initializing it to 'def' if
  // it was unset before.
  //
  // Variable can be assigned or read only from threads that perform 'exec' calls,
  // NOT when loading library modules via 'load' (the library modules must not
  // have side effects or depend on a transient state in vars), or executing
  // callbacks (callbacks do not have enough context to safely use vars).