golangの日記

Go言語を中心にプログラミングについてのブログ

Go言語(golang) publicsuffixパッケージを使ってドメインの分割

golang.png


publicsuffix パッケージを使って FQDN の分割





package main

import (
    "fmt"
    "log"
    "net/url"
    "strings"

    "golang.org/x/net/publicsuffix"
)

func main() {
    rawurl := "https://www.example.co.jp"
    u, err := url.Parse(rawurl)
    if err != nil {
        log.Fatal(err)
    }

    suffix, icann := publicsuffix.PublicSuffix(u.Host)
    // icann は有効なサフィックスかどうかを示す真偽値
    if !icann {
        return
    }
    
    fmt.Println("suffix:", suffix) // suffix: co.jp

    tld := suffix
    sld := ""
    if index := strings.LastIndex(tld, "."); index != -1 {
        sld, tld = tld[:index], tld[index+1:]
    }

    domain := u.Host[:len(u.Host)-len(suffix)-1]

    subdomain := ""
    if index := strings.Index(domain, "."); index != -1 {
        subdomain, domain = domain[:index], domain[index+1:]
    }

    fmt.Println("sub domain:", subdomain)    // sub domain: www
    fmt.Println("domain:", domain)           // domain: example
    fmt.Println("second level domain:", sld) // second level domain: co
    fmt.Println("third level domain:", tld)  // third level domain: jp
}