• Stars
    star
    192
  • Rank 202,019 (Top 4 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 4 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Helpful functions to work with emoji in Golang

GoMoji πŸ”₯

Tests Go Report codecov

GoMoji is a Go package that provides a πŸš€fast and ✨simple way to work with emojis in strings. It has features such as:

Getting Started

Installing

To start using GoMoji, install Go and run go get:

$ go get -u github.com/forPelevin/gomoji

This will retrieve the package.

Check string contains emoji

package main

import (
    "github.com/forPelevin/gomoji"
)

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

Find all

The function searches for all emoji occurrences in a string. It returns a nil slice if there are no emojis.

package main

import (
    "github.com/forPelevin/gomoji"
)

func main() {
    res := gomoji.FindAll("πŸ§– hello πŸ¦‹ world")
    println(res)
}

Result:

[]gomoji.Emoji{
    {
        Slug:        "person-in-steamy-room",
        Character:   "πŸ§–",
        UnicodeName: "E5.0 person in steamy room",
        CodePoint:   "1F9D6",
        Group:       "People & Body",
        SubGroup:    "person-activity",
    },
    {
        Slug:        "butterfly",
        Character:   "πŸ¦‹",
        UnicodeName: "E3.0 butterfly",
        CodePoint:   "1F98B",
        Group:       "Animals & Nature",
        SubGroup:    "animal-bug",
    },
}

Get all

The function returns all existing emojis. You can do whatever you need with the list.

package main

import (
    "github.com/forPelevin/gomoji"
)

func main() {
    emojis := gomoji.AllEmojis()
    println(emojis)
}

Remove all emojis

The function removes all emojis from given string:

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

Replace all emojis with a specified rune

The function replaces all emojis in a string with a given rune:

res := gomoji.ReplaceEmojisWith("πŸ§– hello πŸ¦‹world", '_')
println(res) // "_ hello _world"

Replace all emojis with the result of custom replacer function

The function replaces all emojis in a string with the result of given replacer function:

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

Get emoji info

The function returns info about provided emoji:

info, err := gomoji.GetInfo("1") // error: the string is not emoji
info, err := gomoji.GetInfo("1️⃣")
println(info)

Result:

gomoji.Entity{
    Slug:        "keycap-1",
    Character:   "1️⃣",
    UnicodeName: "E0.6 keycap: 1",
    CodePoint:   "0031 FE0F 20E3",
    Group:       "Symbols",
    SubGroup:    "keycap",
}

Emoji entity

All searching methods return the Emoji entity which contains comprehensive info about emoji.

type Emoji struct {
    Slug        string `json:"slug"`
    Character   string `json:"character"`
    UnicodeName string `json:"unicode_name"`
    CodePoint   string `json:"code_point"`
    Group       string `json:"group"`
    SubGroup    string `json:"sub_group"`
}

Example:

[]gomoji.Emoji{
    {
        Slug:        "butterfly",
        Character:   "πŸ¦‹",
        UnicodeName: "E3.0 butterfly",
        CodePoint:   "1F98B",
        Group:       "Animals & Nature",
        SubGroup:    "animal-bug",
    },
    {
        Slug:        "roll-of-paper",
        Character:   "🧻",
        UnicodeName: "E11.0 roll of paper",
        CodePoint:   "1F9FB",
        Group:       "Objects",
        SubGroup:    "household",
    },
}

Performance

GoMoji Benchmarks

go test -bench=. -benchmem -v -run Benchmark ./...
goos: darwin
goarch: arm64
pkg: github.com/forPelevin/gomoji
BenchmarkContainsEmojiParallel
BenchmarkContainsEmojiParallel-10       150872365                7.207 ns/op           0 B/op          0 allocs/op
BenchmarkContainsEmoji
BenchmarkContainsEmoji-10               20428110                58.86 ns/op            0 B/op          0 allocs/op
BenchmarkRemoveEmojisParallel
BenchmarkRemoveEmojisParallel-10         6463779               193.1 ns/op            68 B/op          2 allocs/op
BenchmarkRemoveEmojis
BenchmarkRemoveEmojis-10                  882298              1341 ns/op              68 B/op          2 allocs/op
BenchmarkGetInfoParallel
BenchmarkGetInfoParallel-10             447353414                2.428 ns/op           0 B/op          0 allocs/op
BenchmarkGetInfo
BenchmarkGetInfo-10                     57733017                20.32 ns/op            0 B/op          0 allocs/op
BenchmarkFindAllParallel
BenchmarkFindAllParallel-10              4001587               305.8 ns/op           296 B/op          4 allocs/op
BenchmarkFindAll
BenchmarkFindAll-10                       694861              1675 ns/op             296 B/op          4 allocs/op
PASS
ok      github.com/forPelevin/gomoji    11.192s

Contact

Vlad Gukasov @vgukasov

License

GoMoji source code is available under the MIT License.