经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Golang解析、验证、修改URL之Host、Port、Path
来源:cnblogs  作者:GaiheiluKamei  时间:2019/9/10 10:59:09  对本文有异议
  • URL解析验证问题
    • net.ParseIP()只能解析不带冒号以及端口号的IP4/IP6
      • ?: 127.0.0.12001:db8::68
      • ?: 127.0.0.1:8080www.baidu.com
    • url.Parse()最好只用来解析标准URL,不能用来验证URL的正确性
  1. func main() {
  2. IP1 := "www.baidu.com"
  3. IP2 := "127.0.0.1"
  4. IP3 := "127.0.0.1:8080"
  5. parsedIP1 := net.ParseIP(IP1)
  6. parsedIP2 := net.ParseIP(IP2)
  7. parsedIP3 := net.ParseIP(IP3)
  8. fmt.Println("net.ParseIP: ", parsedIP1, parsedIP2, parsedIP3)
  9. fmt.Println()
  10. Url1 := "127.0.0"
  11. Url2 := "abc"
  12. Url3 := "127.0.0.1:8080"
  13. Url4 := "http://127.0.0.1:8080/url"
  14. parsedUrl1, err := url.Parse(Url1)
  15. if err != nil {
  16. fmt.Println("Error: ", err)
  17. }
  18. parsedUrl2, err := url.Parse(Url2)
  19. if err != nil {
  20. fmt.Println("Error: ", err)
  21. }
  22. parsedUrl3, err := url.Parse(Url3)
  23. if err != nil {
  24. fmt.Println("Error: ", err)
  25. }
  26. parsedUrl4, err := url.Parse(Url4)
  27. if err != nil {
  28. fmt.Println("Error: ", err)
  29. }
  30. fmt.Println("1: ", parsedUrl1, "2: ", parsedUrl2, "3: ", parsedUrl3, "4: ", parsedUrl4)
  31. }
  32. /*
  33. 输出结果:
  34. net.ParseIP: <nil> 127.0.0.1 <nil>
  35. Error: parse 127.0.0.1:8080: first path segment in URL cannot contain colon
  36. 1: 127.0.0 2: abc 3: <nil> 4: http://127.0.0.1:8080/url
  37. */
  • 正确的URL验证方式
    • go get github.com/asaskevich/govalidator
    • govalidator.IsURL()
  • 获取并修改URL之Host、Port、Path
  1. func main() {
  2. rawUrl := "http://127.0.0.1:8080/url/123"
  3. changeHost := "192.168.1.1"
  4. newUrl, _ := url.Parse(rawUrl)
  5. // Host
  6. newUrlHost := newUrl.Hostname()
  7. // Port
  8. newUrlPort := newUrl.Port()
  9. // Path
  10. newUrlPath := newUrl.Path
  11. // URL类型转string
  12. stringUrl := newUrl.String()
  13. // 修改URl Host
  14. newUrl.Host = changeHost + ":" + newUrl.Port()
  15. fmt.Println(newUrlHost, newUrlPort, newUrlPath, stringUrl, newUrl)
  16. }

其他相关方法:

  • Host、Port
    • net.SplitHostPort() ==> Host、Port、error
    • u := strings.Split(url, ":") ==> Host := u[0]
  • Path
    • url := http://www.a.com/123 ==> base := path.Base(url)
    • fmt.Println(base) ==> 123


      以上结合可完成关于Golang操作URL的大部分问题

原文链接:http://www.cnblogs.com/GaiHeiluKamei/p/11469030.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号