• 获取域名的顶级域名
  • 代码:

    // 获取顶级域名
    func topDomain(url string) string {
       //顶级域名后缀
       allDomainHz := map[string]bool{
          "com": true, "tk": true, "cn": true, "de": true, "net": true, "uk": true, "org": true, "xyz": true, "ru": true, "top": true, "ga": true, "info": true, "icu": true,
          "cf": true, "ml": true, "nl": true, "br": true, "fr": true, "gq": true, "online": true, "eu": true, "site": true, "co": true, "club": true, "it": true, "us": true,
          "ca": true, "au": true, "ws": true, "in": true, "pl": true, "biz": true, "shop": true, "ch": true, "tw": true, "se": true, "loan": true, "vip": true, "es": true,
          "za": true, "jp": true, "be": true, "ph": true, "at": true, "work": true, "me": true, "store": true, "live": true, "cz": true, "wang": true, "dk": true, "vg": true,
          "buzz": true, "space": true, "ir": true, "mx": true, "nu": true, "fun": true, "app": true, "xn--p1ai": true, "pw": true, "kr": true, "website": true, "cc": true,
          "no": true, "io": true, "hu": true, "cyou": true, "ua": true, "tech": true, "ro": true, "id": true, "ltd": true, "win": true, "cl": true, "pro": true, "nz": true,
          "mobi": true, "ar": true, "bar": true, "sk": true, "life": true, "tokyo": true, "tv": true, "vn": true, "fi": true, "fm": true, "gr": true, "men": true, "link": true,
          "xn--fiqs8s": true, "asia": true, "cloud": true, "stream": true, "tr": true, "blog": true, "xn--node": true, "bid": true, "pt": true, "dev": true, "il": true,
          "my": true, "click": true, "ie": true, "world": true, "page": true, "xn--fiqz9s": true, "monster": true, "art": true, "ooo": true, "xn--kprw13d": true, "review": true,
          "host": true, "xn--ses554g": true, "xin": true, "la": true, "ng": true, "design": true, "ae": true, "kz": true, "one": true, "hk": true, "lt": true, "today": true,
          "trade": true, "sg": true, "email": true, "su": true, "by": true, "digital": true, "gdn": true, "name": true, "fit": true, "date": true, "rocks": true, "cat": true,
          "best": true, "ee": true, "group": true, "agency": true, "ke": true, "download": true, "pe": true, "ec": true, "party": true, "africa": true, "solutions": true,
          "si": true, "press": true, "studio": true, "rest": true, "lv": true, "blackfriday": true, "services": true, "rs": true, "company": true, "ovh": true, "news": true,
          "tel": true, "ai": true, "network": true, "hr": true, "ren": true, "cfd": true, "hosting": true, "pk": true, "politie": true, "ma": true, "business": true, "lu": true,
          "th": true, "guru": true, "ink": true, "xxx": true, "media": true, "science": true, "bg": true, "racing": true, "london": true, "xn--mxtq1m": true, "uz": true,
          "nyc": true, "realtor": true, "ms": true,
       }
    
       //允许二级域名的顶级域名
       ttErji := map[string]bool{
          "com": true, "net": true, "org": true, "cn": true, "gov": true, "edu": true,
       }
    
       // 去掉"http://" 和 "https://://"
       domain := strings.ToLower(strings.ReplaceAll(strings.ReplaceAll(url, "http://", ""), "https://", ""))
       if idx := strings.Index(domain, "/"); idx != -1 {
          domain = domain[:idx]
       }
    
       // 获取顶级域名
       topDomain := ""
       ls := strings.Split(domain, ".")
    
       len := len(ls)
       last := ls[len-1]
    
       if idx := strings.Index(last, "/"); idx != -1 {
          last = last[:idx]
       }
    
       if !allDomainHz[last] { // 不是后缀
          return ""
       }
       if len < 2 { // 不是域名
          topDomain = ""
       } else if len == 2 {
          if ls[0] != "" && ls[1] != "" {
             topDomain = ls[0] + "." + ls[1]
          }
       } else if len > 2 {
          // 允许作为二级后缀的部分
          erji := ls[len-2] // 二级后缀
          if _, ok := ttErji[erji]; ok {
             if ls[len-3] != "" && ls[len-2] != "" && ls[len-1] != "" {
                topDomain = ls[len-3] + "." + ls[len-2] + "." + ls[len-1]
             }
          } else {
             if ls[len-2] != "" && ls[len-1] != "" {
                topDomain = ls[len-2] + "." + ls[len-1]
             }
          }
       }
    
       if strings.HasPrefix(topDomain, "-") {
          topDomain = ""
       }
    
       return strings.ToLower(topDomain) //最终转成小写字母
    }