| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package publicsuffix_test |
| |
| import ( |
| "fmt" |
| "strings" |
| |
| "golang.org/x/net/publicsuffix" |
| ) |
| |
| // This example demonstrates looking up several domains' eTLDs (effective Top |
| // Level Domains) in the PSL (Public Suffix List) snapshot. For each eTLD, the |
| // example also determines whether the eTLD is ICANN managed, privately |
| // managed, or unmanaged (not explicitly in the PSL). |
| // |
| // See https://publicsuffix.org/ for the underlying PSL data. |
| func ExamplePublicSuffix_manager() { |
| domains := []string{ |
| "amazon.co.uk", |
| "books.amazon.co.uk", |
| "www.books.amazon.co.uk", |
| "amazon.com", |
| "", |
| "example0.debian.net", |
| "example1.debian.org", |
| "", |
| "golang.dev", |
| "golang.net", |
| "play.golang.org", |
| "gophers.in.space.museum", |
| "", |
| "0emm.com", |
| "a.0emm.com", |
| "b.c.d.0emm.com", |
| "", |
| "there.is.no.such-tld", |
| "", |
| // Examples from the PublicSuffix function's documentation. |
| "foo.org", |
| "foo.co.uk", |
| "foo.dyndns.org", |
| "foo.blogspot.co.uk", |
| "cromulent", |
| } |
| |
| for _, domain := range domains { |
| if domain == "" { |
| fmt.Println(">") |
| continue |
| } |
| eTLD, icann := publicsuffix.PublicSuffix(domain) |
| |
| // Only ICANN managed domains can have a single label. Privately |
| // managed domains must have multiple labels. |
| manager := "Unmanaged" |
| if icann { |
| manager = "ICANN Managed" |
| } else if strings.IndexByte(eTLD, '.') >= 0 { |
| manager = "Privately Managed" |
| } |
| |
| fmt.Printf("> %24s%16s is %s\n", domain, eTLD, manager) |
| } |
| |
| // Output: |
| // > amazon.co.uk co.uk is ICANN Managed |
| // > books.amazon.co.uk co.uk is ICANN Managed |
| // > www.books.amazon.co.uk co.uk is ICANN Managed |
| // > amazon.com com is ICANN Managed |
| // > |
| // > example0.debian.net debian.net is Privately Managed |
| // > example1.debian.org org is ICANN Managed |
| // > |
| // > golang.dev dev is ICANN Managed |
| // > golang.net net is ICANN Managed |
| // > play.golang.org org is ICANN Managed |
| // > gophers.in.space.museum space.museum is ICANN Managed |
| // > |
| // > 0emm.com com is ICANN Managed |
| // > a.0emm.com a.0emm.com is Privately Managed |
| // > b.c.d.0emm.com d.0emm.com is Privately Managed |
| // > |
| // > there.is.no.such-tld such-tld is Unmanaged |
| // > |
| // > foo.org org is ICANN Managed |
| // > foo.co.uk co.uk is ICANN Managed |
| // > foo.dyndns.org dyndns.org is Privately Managed |
| // > foo.blogspot.co.uk blogspot.co.uk is Privately Managed |
| // > cromulent cromulent is Unmanaged |
| } |