Skip to content

Instantly share code, notes, and snippets.

View Integralist's full-sized avatar
🎯
Making an impact

Mark McDonnell Integralist

🎯
Making an impact
View GitHub Profile
@Integralist
Integralist / 1. README.md
Last active April 10, 2024 00:53
[Golang slog structure logging] #go #golang #log #logging #structuredlogs
@Integralist
Integralist / main.go
Last active February 7, 2024 12:34
[Go copy struct from pointer] #go #golang
// structs are considered a primitive type and as such are passed by value.
// but if you have a pointer to struct you need to be careful not to assign it to a variable thinking you're getting a copy of the 'value'.
// you're only getting a copy of the 'pointer'! which means the newly assigned variable will mutate the underlying struct.
// so to make a copy you have to dereference the struct pointer first.
package main
import "fmt"
type Foo struct {
@Integralist
Integralist / main.go
Created January 18, 2024 12:30
[Golang init] #go #golang
// This is a file designed to be run on go.dev/play (link below).
// It validates the behaviour of init() functions.
// i.e. init() is only called once regardless of how many times its package is imported.
// https://go.dev/play/p/99YpDma6mVJ
package main
import (
"play.ground/bar"
"play.ground/foo"
)
@Integralist
Integralist / main.go
Last active January 12, 2024 15:52
[Go pointer receiver method avoids runtime panic] #go #golang
// https://play.golang.com/p/NOxcQO8U-G7
//
// IMPORTANT: Even though you can call the pointer receiver method, you still can't access a field without triggering a runtime panic. But just being able to call the method is still useful/interesting.
//
// The explanation for this is as follows...
//
// There’s two things going on here. The first is calling a method. Go knows which method to call thanks to the name of the method and the type of the receiver. That’s all there is to knowing which method to call.
// e.g. The Go runtime evaluates the code `e.PointerMethod()` into something like `(*Example).PointerMethod(e)`.
// The trick to understand the rest is to remember that having a pointer be nil is not a reason to panic just yet. You only panic when you try to do something that needs to dereference that nil pointer.
// Now when the method gets called, the sugared version (e.g. `(*Example).PointerMethod(e)`) shows that the first argument is the receiver.
@Integralist
Integralist / template.sh
Created December 15, 2023 12:25
[Generate OpenAPI schema dynamically] #openapi #template #bash #shell
#!/bin/bash
AWK_PATH=$(which awk)
CAT_PATH=$(which cat)
read -rp "Enter API Version (e.g. 1.0.0): " VERSION
read -rp "Enter API Title: " TITLE
read -rp "Enter API Description: " DESCRIPTION
read -rp "Enter Your Name (for contact info): " NAME
read -rp "Enter Your Email (for contact info): " EMAIL
@Integralist
Integralist / README.md
Last active November 17, 2023 12:56
[Go range bug] #go #golang #range

Problem

Consider the following example:

package main

import "fmt"

func main() {
@Integralist
Integralist / trufflehog.go
Last active October 10, 2023 11:56
[Go filter secrets] #go #golang #secrets
// WARNING: There are regexes in trufflehog that try to match the VALUE.
// So for example, setting `AWS_SECRET_ACCESS_KEY` by itself doesn't get identified.
// Only if the VALUE assigned to it matches the expected regex pattern defined in trufflehog.
package main
import (
"fmt"
"log"
"runtime"
@Integralist
Integralist / parse_go.go
Last active September 25, 2023 08:04
[Go: recursively walk tree looking for go files and analysing their imports] #go #golang #ast
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"log"
"os"
"path/filepath"
@Integralist
Integralist / main.go
Last active June 16, 2023 08:21
[Go call method directly] This uses 'method expressions' #go #golang #method #expressions
// https://play.golang.com/p/iPOOcSzZCe7
package main
import (
"fmt"
)
type Foo struct {
Bar string
@Integralist
Integralist / async.sh
Created June 5, 2023 12:29
[find files asynchronously] #xargs #async #find
#!/bin/bash
replacement_patterns() {
echo "Processing file: $1"
}
replacement_patterns "$@"