hakk

software development, devops, and other drivel
Tree lined path

Code Examples

Pick a random element in an array or slice in Go (Golang)

Using the ‘math/rand’ package of golang to generate a pseudo-random number between [x,n). The bracket at the end means that n is exclusive and x could be any number 0 or greater. The package contains a function Intn which can be utilized to pick a random element in an array or slice of int or string. This example also uses the time package to seed the generator. Otherwise the it would be seeded with a 1 and the generated numbers wouldn’t be random. Read more...

A quick HTTP file server example in Go

Basic example to serve directory. package main import ( "flag" "fmt" "log" "net/http" ) func main() { // Simple static webserver: pathPtr := flag.String("d", ".", "Directory path to serve") portPtr := flag.String("p", "8080", "Port to listen on") interfacePtr := flag.String("i", "", "Interface to listen on (default all)") flag.Parse() log.Printf("Serving %s on %s:%s", *pathPtr, *interfacePtr, *portPtr) err := http.ListenAndServe(fmt.Sprintf("%s:%s", *interfacePtr, *portPtr), http.FileServer(http.Dir(*pathPtr))) if err != nil { log.Fatal(err) } } Example with ability to set custom headers Read more...

Example of adding CORS headers Flask

An example of adding CORS headers to a Flask app without using Flask-CORS. from flask import Flask, request, jsonify, make_response from werkzeug.datastructures import Headers app = Flask(__name__) @app.route('/', methods=['OPTIONS', 'GET', 'POST']) def index(): # output all request headers to terminal print(request.headers) if request.method == 'POST': # handle json post data here... print(request.get_json()) headers = Headers() headers.add('Access-Control-Allow-Origin', '*') headers.add('Access-Control-Allow-Methods', 'OPTIONS', 'GET', 'POST') headers.add('Access-Control-Allow-Headers', 'Content-Type') headers.add('Access-Control-Max-Age', '300') resp = make_response( jsonify( {'msg':'nailed it! Read more...

HTML templating in Go

Within the Go Standard library HTML package there’s a template package which enables generating HTML page from a rich templating engine with the output safe against code injection. This means there is no need to worry about XSS attacks as Go parses the HTML template and escapes all inputs before displaying it to the browser. Let’s take a look at a simple example. This example will use a couple of structs to store data about some people and then display that data in an HTML table. Read more...

Python date string to date object

If you have a date string and need to convert it into a date object, how can it be converted to a date object using Python? Python includes within the datetime package a strptime function, here’s an example usage: >>> import datetime >>> datetime.datetime.strptime('2022-10-30T14:32:41Z', "%Y-%m-%dT%H:%M:%S%z") datetime.datetime(2022, 10, 30, 14, 32, 41, tzinfo=datetime.timezone.utc) Now that it’s a date object and can be manipulated as needed. If the date string you have doesn’t match this format, check out the format codes table to find the necessary directives. Read more...

How to list files in a directory using Go [2023]

In Go there are a couple of options to list the files of a directory using the standard library. In this article you will find a list of three different methods. Note: Be aware that ioutil.ReadDir is deprecated since Go 1.16. Instead os.ReadDir should be used (shown in this article). os.ReadDir os.ReadDir is included in the standard library in the os package. Check out the documentation for more information. It’s a drop in replacement from ioutil. Read more...

Golang Convert from Int to Hex

Converting from an Integer to hex is easy in Golang. Since a hex is really just an Integer literal, you can ask the fmt package for a string representation of that integer, using fmt.Sprintf(), and the %x or %X format. package main import ( "fmt" ) func main() { for i := 1; i < 20; i++ { h := fmt.Sprintf("0x%x", i) fmt.Println(h) } } Golang Play Output: 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 Convert back to int package main import ( "fmt" "strconv" ) var hex = []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "10", "11", "12", "13"} func main() { for _, h := range hex { i, _ := strconv. Read more...

Golang Split Host Port to Separate Variables

Getting just the host or port from the “host:port” form is easy using the SplitHostPort function from the net package. Below are some example uses of the function. As seen below, IPv6 addresses in hostport must be enclosed in square brackets. package main import ( "fmt" "net" ) func main() { // IPv4 host, port, err := net.SplitHostPort("172.217.7.14:443") if err != nil { fmt.Println(err) } fmt.Println(host, port) // IPv6 host, port, err = net. Read more...

Golang Convert File Size to a human friendly format

Get file size in human-readable units like kilobytes (KB), Megabytes (MB) or GigaBytes (GB) 1 KilloByte == 1024 Bytes 1 Megabyte == 1024*1024 Bytes 1 GigaByte == 102410241024 Bytes package main import ( "fmt" "log" "math" "os" "strconv" ) var ( suffixes [5]string ) func Round(val float64, roundOn float64, places int ) (newVal float64) { var round float64 pow := math.Pow(10, float64(places)) digit := pow * val _, div := math. Read more...

Golang Listing Directory Contents and Sorting by File Modified Time

In this example we will be listing the contents of a directory in go and sorting by date. To get the list of files we will use the os.ReadDir function from the os package. This function returns a slice sorted by file name which contains elements of os.FileInfo type which will enable us to get the last modified time. To sort the files we will use the modification time with the sort package along with the After and Before functions from the time package. Read more...