code: func IdleAdd(f interface{}, args ...interface{}) (SourceHandle, error) {
  	// f must be a func with no parameters.
  	rf := reflect.ValueOf(f)
  	if rf.Type().Kind() != reflect.Func {
  		return 0, errors.New("f is not a function")
  	}
  
  	// Create an idle source func to be added to the main loop context.
  	idleSrc := C.g_idle_source_new()
  	if idleSrc == nil {
  		return 0, errNilPtr
  	}
  	return sourceAttach(idleSrc, rf, args...)
  }
docs: // IdleAdd adds an idle source to the default main event loop
  // context.  After running once, the source func will be removed
  // from the main event loop, unless f returns a single bool true.
  //
  // This function will cause a panic when f eventually runs if the
  // types of args do not match those of f.