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
+8.1k Golang : Generate Datamatrix barcode
+19.3k Golang : Count JSON objects and convert to slice/array
+15.1k Chrome : ERR_INSECURE_RESPONSE and allow Chrome browser to load insecure content
+7.2k Gogland : Single File versus Go Application Run Configurations
+7.5k Golang : Regular Expression find string example
+19.6k Golang : Check if os.Stdin input data is piped or from terminal
+6.8k Golang : How to fix html/template : "somefile" is undefined error?
+31.7k Golang : Convert []string to []byte examples
+6.2k Golang : Totalize or add-up an array or slice example
+33.1k Golang : All update packages with go get command
+12.2k Golang : Listen and Serve on sub domain example
+4.7k Golang : Display packages names during compilation