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
+5.6k Javascript : How to refresh page with JQuery ?
+7.8k Golang : Get today's weekday name and calculate target day distance example
+21.4k Golang : How to read float value from standard input ?
+18.9k Golang : Read input from console line
+14.3k Golang : Parsing or breaking down URL
+17.2k Golang : When to use init() function?
+19.1k Golang : Populate dropdown with html/template example
+26.2k Golang : Calculate future date with time.Add() function
+8.1k How to show different content from website server when AdBlock is detected?
+19k Golang : When to use public and private identifier(variable) and how to make the identifier public or private?
+23.4k Golang : Read a file into an array or slice example
+11.5k SSL : The certificate is not trusted because no issuer chain was provided