Golang : Get URI segments by number and assign as variable example
Coming from PHP and CodeIgniter(framework for PHP) background. One thing that I missed is the URI helper's $this->uri->segment(n)
where it permits me to retrieve the segment by number and assign the value to string variable. For example :
URL : http://example.com/index.php/news/local/metro/crimeisup
The segment numbers would be this:
news
local
metro
crimeisup
news/local/metro/crime_is_up
is known as URL Path.
In this tutorial, we will learn how to get the URI segments by number and assign the segment as variable with Golang. See codes below :
package main
import (
"fmt"
"net/url"
"strings"
)
func main() {
rawURL := "http://example.com/index.php/news/local/metro/crime_is_up"
fmt.Println("URL : ", rawURL)
url, err := url.Parse(rawURL)
if err != nil {
panic(err)
}
path := url.Path
uriSegments := strings.Split(path, "/")
fmt.Println(uriSegments) // count starts from 1
var metro = uriSegments[3] // assign to variable
fmt.Println("[segment 3] : ", metro)
fmt.Println("[segment 4] : ", uriSegments[4])
}
Output :
URL : http://example.com/index.php/news/local/metro/crimeisup
[ index.php news local metro crimeisup]
[segment 3] : local
[segment 4] : metro
Hang on..this is processing a static URL string. How about getting the URL from browser ?
No worries, here it is :
package main
import (
"net/http"
"strings"
)
func SayHello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func GetURISegment(w http.ResponseWriter, r *http.Request) {
uriSegments := strings.Split(r.URL.Path, "/")
var metro = uriSegments[3]
w.Write([]byte("[segment 3] : " + metro + "\r\n"))
w.Write([]byte("[segment 4] : " + uriSegments[4]))
}
func main() {
// http.Handler
mux := http.NewServeMux()
mux.HandleFunc("/", SayHello)
mux.HandleFunc("/news/local/metro/crime_is_up", GetURISegment)
http.ListenAndServe(":8080", mux)
}
Run this modified code and point your browser URL to :
http://localhost:8080/news/local/metro/crime_is_up
and you will see the following output :
[segment 3] : metro
[segment 4] : crimeisup
That's it. Simple URI segmenting by the numbers. Hope you will find this tutorial useful.
References :
https://ellislab.com/codeigniter/user-guide/libraries/uri.html
https://www.socketloop.com/tutorials/golang-parsing-or-breaking-down-url
See also : Golang : Parsing or breaking down URL
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+12.7k Golang : Get absolute path to binary for os.Exec function with exec.LookPath
+5.7k Unix/Linux/MacOSx : Get local IP address
+14.8k Golang : Get URI segments by number and assign as variable example
+16.4k Golang :Trim white spaces from a string
+16.5k Golang : Send email and SMTP configuration example
+11.6k CodeIgniter : Import Linkedin data
+8.5k PHP : How to parse ElasticSearch JSON ?
+26.5k Golang : Get executable name behind process ID example
+27.4k Golang : Convert CSV data to JSON format and save to file
+81.2k Golang : How to return HTTP status code?
+27.5k Golang : Convert integer to binary, octal, hexadecimal and back to integer
+8.3k Prevent Write failed: Broken pipe problem during ssh session with screen command