URL parser in Golang
The URL parser helps to collect all arguments data from URL.
Example
package main
import (
"fmt"
"log"
"net"
"net/url"
"strings"
)
func main() {
var links = []string{"https://analytics.google.com/analytics/web/#embed/report-home/a98705171w145119383p149829595/",
"jdbc:mysql://test_user:ouupppssss@localhost:3306/sakila?profileSQL=true",
"https://bob:pass@testing.com/country/state",
"http://www.golangprograms.com/",
"mailto:John.Mark@testing.com",
"https://www.google.com/search?q=golang+print+string+10+times&oq=golang+print+string+10+times&aqs=chrome..69i57.8786j0j8&sourceid=chrome&ie=UTF-8",
"urn:oasis:names:description:docbook:dtd:xml:4.1.2",
"https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab",
"ssh://mark@testing.com",
}
for _, link := range links {
fmt.Println("URL:", link)
u, err := url.Parse(link)
if err != nil {
log.Println(err)
continue
}
parserURL(u)
fmt.Println(strings.Repeat("#", 50))
fmt.Println()
}
}
func parserURL(u *url.URL) {
fmt.Println("Scheme:", u.Scheme)
if u.Opaque != "" {
fmt.Println("Opaque:", u.Opaque)
}
if u.User != nil {
fmt.Println("Username:", u.User.Username())
if pwd, ok := u.User.Password(); ok {
fmt.Println("Password:", pwd)
}
}
if u.Host != "" {
if host, port, err := net.SplitHostPort(u.Host); err == nil {
fmt.Println("Host:", host)
fmt.Println("Port:", port)
} else {
fmt.Println("Host:", u.Host)
}
}
if u.Path != "" {
fmt.Println("Path:", u.Path)
}
if u.RawQuery != "" {
fmt.Println("RawQuery:", u.RawQuery)
m, err := url.ParseQuery(u.RawQuery)
if err == nil {
for k, v := range m {
fmt.Printf("Key: %q Values: %q\n", k, v)
}
}
}
if u.Fragment != "" {
fmt.Println("Fragment:", u.Fragment)
}
}
Output
URL: https://analytics.google.com/analytics/web/#embed/report-home/a98705171w145119383p149829595/
Scheme: https
Host: analytics.google.com
Path: /analytics/web/
Fragment: embed/report-home/a98705171w145119383p149829595/
##################################################
URL: jdbc:mysql://test_user:ouupppssss@localhost:3306/sakila?profileSQL=true
Scheme: jdbc
Opaque: mysql://test_user:ouupppssss@localhost:3306/sakila
RawQuery: profileSQL=true
Key: "profileSQL" Values: ["true"]
##################################################
URL: https://bob:pass@testing.com/country/state
Scheme: https
Username: bob
Password: pass
Host: testing.com
Path: /country/state
##################################################
URL: http://www.golangprograms.com/
Scheme: http
Host: www.golangprograms.com
Path: /
##################################################
URL: mailto:John.Mark@testing.com
Scheme: mailto
Opaque: John.Mark@testing.com
##################################################
URL: https://www.google.com/search?q=golang+print+string+10+times&oq=golang+print+string+10+times&aqs=chrome..69i57.8786j0j8&sourceid=chrome&i
e=UTF-8
Scheme: https
Host: www.google.com
Path: /search
RawQuery: q=golang+print+string+10+times&oq=golang+print+string+10+times&aqs=chrome..69i57.8786j0j8&sourceid=chrome&ie=UTF-8
Key: "q" Values: ["golang print string 10 times"]
Key: "oq" Values: ["golang print string 10 times"]
Key: "aqs" Values: ["chrome..69i57.8786j0j8"]
Key: "sourceid" Values: ["chrome"]
Key: "ie" Values: ["UTF-8"]
##################################################
URL: urn:oasis:names:description:docbook:dtd:xml:4.1.2
Scheme: urn
Opaque: oasis:names:description:docbook:dtd:xml:4.1.2
##################################################
URL: https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab
Scheme: https
Host: stackoverflow.com
Path: /jobs
RawQuery: med=site-ui&ref=jobs-tab
Key: "med" Values: ["site-ui"]
Key: "ref" Values: ["jobs-tab"]
##################################################
URL: ssh://mark@testing.com
Scheme: ssh
Username: mark
Host: testing.com
##################################################
Most Helpful This Week
How to Decode or Unmarshal bi-dimensional array of integers?
Example to use Weekday and YearDay function
Regular expression to validate phone number
Example to handle GET and POST request in Golang
Find length of Channel, Pointer, Slice, String and Map
Example: Split, Join, and Equal from BYTES Package