code: func Init(appName string) error {
  	context.lock.Lock()
  	defer context.lock.Unlock()
  
  	if context.initialized {
  		return ErrAlreadyInit
  	}
  
  	log.Debug("Initializing libmemif library")
  
  	// Initialize C-libmemif.
  	var errCode int
  	if appName == "" {
  		errCode = int(C.memif_init(nil, nil, nil, nil, nil))
  	} else {
  		appName := C.CString(appName)
  		defer C.free(unsafe.Pointer(appName))
  		errCode = int(C.memif_init(nil, appName, nil, nil, nil))
  	}
  	err := getMemifError(errCode)
  	if err != nil {
  		return err
  	}
  
  	// Initialize the map of memory interfaces.
  	context.memifs = make(map[int]*Memif)
  
  	// Start event polling.
  	context.wg.Add(1)
  	go pollEvents()
  
  	context.initialized = true
  	log.Debug("libmemif library was initialized")
  	return err
  }
docs: // Init initializes the libmemif library. Must by called exactly once and before
  // any libmemif functions. Do not forget to call Cleanup() before exiting
  // your application.
  // <appName> should be a human-readable string identifying your application.
  // For example, VPP returns the version information ("show version" from VPP CLI).