code: def _import_and_bind(self, imp):
      
      # Acquire handles to the Code objects in each Go package and call
      # ImportModule to initialize all modules.
      with self.block.alloc_temp() as mod, \
          self.block.alloc_temp('[]*πg.Object') as mod_slice:
        self.writer.write_checked_call2(
            mod_slice, 'πg.ImportModule(πF, {})', util.go_str(imp.name))
  
        # Bind the imported modules or members to variables in the current scope.
        for binding in imp.bindings:
          if binding.bind_type == imputil.Import.MODULE:
            self.writer.write('{} = {}[{}]'.format(
                mod.name, mod_slice.expr, binding.value))
            self.block.bind_var(self.writer, binding.alias, mod.expr)
          else:
            self.writer.write('{} = {}[{}]'.format(
                mod.name, mod_slice.expr, imp.name.count('.')))
            # Binding a member of the imported module.
            with self.block.alloc_temp() as member:
              self.writer.write_checked_call2(
                  member, 'πg.GetAttr(πF, {}, {}, nil)',
                  mod.expr, self.block.root.intern(binding.value))
              self.block.bind_var(self.writer, binding.alias, member.expr)
docs: Generates code that imports a module and binds it to a variable.
  
      Args:
        imp: Import object representing an import of the form "import x.y.z" or
            "from x.y import z". Expects only a single binding.