Quick Go Dump

4 May 2022

I am working on porting a Go SDK to Rust. My goal right now is to figure out the I/Os of a certain SDK function and replicate it in go.

I’m an lucky the previous maintainers provided an in memory client, which I should be able to override and json dump all the I/Os, which should become the input for my rust SDK tests.

Example

This is the commit where I test this approach:

https://github.com/laurentsenta/sdk-go/commit/cf5506c708a66f3f5e0579ab3e32cac60e858b54

It’s a [[TestGround]] hack.

Anonymous Structs

Define the struct and create it at the same time. It’s the fastest way to hack around and get a readable JSON output in cases where you want some data and it’s not straightforward to start a go debugger.

(see below why)

	i.operations = append(i.operations, Operation{Kind: "barrier", Payload: struct {
		State  State `json:"state"`
		Target int   `json:"target"`
	}{
		State:  state,
		Target: target,
	}})

Build in docker

docker run -t -i --rm --volume $PWD:/pwd golang:1.17-buster bash

That’ll mount the current folder and let you build from a docker / linux / buster image. Useful when you work on a piece of go code that doesn’t build on macos.

JSON Marshal indent

func (i *inmemClient) DumpIO() error {
	bytes, err := json.MarshalIndent(i.operations, "", "  ")

	if err != nil {
		return err
	}

	println(string(bytes))
	return nil
}

Laurent Senta

I wrote software for large distributed systems, web applications, and even robots. These days I focus on making developers, creators, and humans more productive through IPDX.co.