code: func (l *State) PushGoClosure(function Function, upValueCount uint8) {
  	if upValueCount == 0 {
  		l.apiPush(&goFunction{function})
  	} else {
  		n := int(upValueCount)
  
  		l.checkElementCount(n)
  		cl := &goClosure{function: function, upValues: make([]value, upValueCount)}
  		l.top -= n
  		copy(cl.upValues, l.stack[l.top:l.top+n])
  		l.apiPush(cl)
  	}
  }
docs: // PushGoClosure pushes a new Go closure onto the stack.
  //
  // When a Go function is created, it is possible to associate some values with
  // it, thus creating a Go closure; these values are then accessible to the
  // function whenever it is called.  To associate values with a Go function,
  // first these values should be pushed onto the stack (when there are multiple
  // values, the first value is pushed first).  Then PushGoClosure is called to
  // create and push the Go function onto the stack, with the argument upValueCount
  // telling how many values should be associated with the function.  Calling
  // PushGoClosure also pops these values from the stack.
  //
  // When upValueCount is 0, this function creates a light Go function, which is just a
  // Go function.
  //
  // http://www.lua.org/manual/5.2/manual.html#lua_pushcclosure