Skip to content

forPelevin/gomoji

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

19 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

GoMoji πŸ”₯

Tests Go Report codecov

A high-performance Go library for working with emojis in strings, offering fast emoji detection, manipulation, and information retrieval.

Table of Contents

Installation

Prerequisites

  • Go 1.11 or higher (for module support)

Installing

go get -u github.com/forPelevin/gomoji

Features

  • πŸ”Ž Fast emoji detection in strings
  • πŸ‘ͺ Find all emoji occurrences with detailed information
  • 🌐 Access comprehensive emoji database
  • 🧹 Remove emojis from strings
  • ↔️ Replace emojis with custom characters
  • ↕️ Custom emoji replacement functions
  • 🧐 Detailed emoji information lookup

Usage Examples

Check for Emojis

package main

import "github.com/forPelevin/gomoji"

func main() {
    hasEmoji := gomoji.ContainsEmoji("hello world πŸ€—")
    println(hasEmoji) // true
}

Find All Emojis

emojis := gomoji.FindAll("πŸ§– hello πŸ¦‹ world")
// Returns slice of Emoji structs with detailed information

Remove Emojis

cleaned := gomoji.RemoveEmojis("πŸ§– hello πŸ¦‹ world")
println(cleaned) // "hello world"

Replace Emojis

// Replace with a specific character
replaced := gomoji.ReplaceEmojisWith("πŸ§– hello πŸ¦‹ world", '_')
println(replaced) // "_ hello _ world"

// Replace with custom function
customReplaced := gomoji.ReplaceEmojisWithFunc("πŸ§– hello πŸ¦‹ world", func(em Emoji) string {
    return em.Slug
})
println(customReplaced) // "person-in-steamy-room hello butterfly world"

Get Emoji Information

info, err := gomoji.GetInfo("πŸ¦‹")
if err == nil {
    println(info.Slug)        // "butterfly"
    println(info.UnicodeName) // "E3.0 butterfly"
    println(info.Group)       // "Animals & Nature"
}

API Documentation

Emoji Structure

type Emoji struct {
    Slug        string `json:"slug"`        // Unique identifier
    Character   string `json:"character"`   // The emoji character
    UnicodeName string `json:"unicode_name"` // Official Unicode name
    CodePoint   string `json:"code_point"`  // Unicode code point
    Group       string `json:"group"`       // Emoji group category
    SubGroup    string `json:"sub_group"`   // Emoji subgroup category
}

Core Functions

  • ContainsEmoji(s string) bool - Checks if a string contains any emoji
  • FindAll(s string) []Emoji - Finds all unique emojis in a string
  • RemoveEmojis(s string) string - Removes all emojis from a string
  • ReplaceEmojisWith(s string, c rune) string - Replaces emojis with a specified character
  • GetInfo(emoji string) (Emoji, error) - Gets detailed information about an emoji
  • AllEmojis() []Emoji - Returns all available emojis

Performance

GoMoji is designed for high performance, with parallel processing capabilities for optimal speed. Here are the key benchmarks:

Operation Sequential Performance Parallel Performance Allocations
Contains Emoji 57.49 ns/op 7.167 ns/op 0 B/op, 0 allocs/op
Remove Emojis 1454 ns/op 201.4 ns/op 68 B/op, 2 allocs/op
Find All 1494 ns/op 313.8 ns/op 288 B/op, 2 allocs/op
Get Info 8.591 ns/op 1.139 ns/op 0 B/op, 0 allocs/op
Replace With Slug 3822 ns/op 602.4 ns/op 160 B/op, 3 allocs/op

Full benchmark details:

go test -bench=. -benchmem -v -run Benchmark ./...
goos: darwin
goarch: arm64
pkg: github.com/forPelevin/gomoji
cpu: Apple M1 Pro
BenchmarkContainsEmojiParallel-10               164229604                7.167 ns/op           0 B/op             0 allocs/op
BenchmarkContainsEmoji-10                       20967183                57.49 ns/op            0 B/op             0 allocs/op
BenchmarkReplaceEmojisWithSlugParallel-10        2160638               602.4 ns/op           160 B/op             3 allocs/op
BenchmarkReplaceEmojisWithSlug-10                 309879              3822 ns/op             160 B/op             3 allocs/op
BenchmarkRemoveEmojisParallel-10                 5794255               201.4 ns/op            68 B/op             2 allocs/op
BenchmarkRemoveEmojis-10                          830334              1454 ns/op              68 B/op             2 allocs/op
BenchmarkGetInfoParallel-10                     989043939                1.139 ns/op           0 B/op             0 allocs/op
BenchmarkGetInfo-10                             139558108                8.591 ns/op           0 B/op             0 allocs/op
BenchmarkFindAllParallel-10                      4029028               313.8 ns/op           288 B/op             2 allocs/op
BenchmarkFindAll-10                               751990              1494 ns/op             288 B/op             2 allocs/op

Note: Benchmarks were performed on Apple M1 Pro processor. Your results may vary depending on hardware.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Contact

Vlad Gukasov @vgukasov

License

GoMoji is available under the MIT License. GoMoji source code is available under the MIT License.

About

Helpful functions to work with emoji in Golang

Topics

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •