Device-detector-go is a precise user agent parser and device detector written in Golang, backed by the largest and most up-to-date open-source user agent database and library written js.
Device-detector-go will parse any user agent and detect the browser, operating system, device used (desktop, tablet, mobile, tv, cars, console, etc.), brand and model. Works with go and in the browser.
This library uses [device-detector-js](https://github.com/etienne-martin/device-detector-js) and originial library maintainer says;
This library is heavily tested and relies on over 10,000 tests to detect thousands of user agent strings, even from rare and obscure browsers and devices.
This is a go port of device-detector-js (uses this library in v8 engine directly and exports logics) and relatively based on Matomo device-detector rules
There is too many go user agent parsers, but none of them has powerful rules as Matomo device-detector and there is only one golang port of matomo (detector gamebtc/devicedetector), but this one works heavy like 40ms. This is too much. This projects aim is using speed of the nodejs repo. And not implement the go version from scratch.
To use device-detector-go in your project, run:
go get github.com/umutbasal/device-detector-go
import (
device detector "github.com/umutbasal/device-detector-go"
)
Example - user agent detection:
import (
devicedetector "github.com/umutbasal/device-detector-go"
)
func main() {
userAgent := "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36"
detector, err := devicedetector.NewDeviceDetector(devicedetector.DeviceDetectorOptions{})
if err != nil {
panic(err)
}
result, err := detector.Parse(user)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", result)
}
Output:
{
"client": {
"type": "browser",
"name": "Chrome Mobile",
"version": "41.0",
"engine": "Blink",
"engineVersion": ""
},
"os": {
"name": "Android",
"version": "6.0",
"platform": ""
},
"device": {
"type": "smartphone",
"brand": "Google",
"model": "Nexus 5X"
},
"bot": null
}
Example - bot detection:
import (
devicedetector "github.com/umutbasal/device-detector-go"
)
func main() {
userAgent := "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36"
detector, err := devicedetector.NewBotDetector(devicedetector.DeviceDetectorOptions{})
if err != nil {
panic(err)
}
result, err := detector.Parse(user)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", result)
}
Output:
{
"name": "Googlebot",
"category": "Search bot",
"url": "http://www.google.com/bot.html",
"producer": {
"name": "Google Inc.",
"url": "http://www.google.com"
}
}
There is a list in original js repo
When contributing to this project, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.
Update the README.md with details of changes to the library.
Execute go test -v
and update the tests if needed.
This is a free/libre library under license LGPL v3 or later.