Here are screenshots and code samples from the article:

langcomp CPU

langcomp data

langcomp cobol source

Go READ example

package main

import (
	"encoding/csv"
	"fmt"
	"io"
	"os"
	"time"
)

type InfileRec struct {
	ib1  string
	ib2  string
	ib3  string
	ib4  string
	ib5  string
	ib6  string
	ib7  string
	ib8  string
	ib9  string
	ib10 string
	ib11 string
	ib12 string
}

func main() {
	start := time.Now()
	fmt.Printf("Begin GO run of LANGCOMP2 @ %s\n", start)
	csvfile, err := os.Open("star.csv")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer csvfile.Close() // sets up the file close upon exit of the function

	reader := csv.NewReader(csvfile)
	reader.FieldsPerRecord = -1 // sets number of fields be record variable

	var (
		record      []string
		InputBuffer InfileRec
		kount       uint32 = 0
	)

	for err == nil {
		record, err = reader.Read()
		kount += 1
		if len(record) == 12 {
			InputBuffer.ib1 = record[0]
			InputBuffer.ib2 = record[1]
			InputBuffer.ib3 = record[2]
			InputBuffer.ib4 = record[3]
			InputBuffer.ib5 = record[4]
			InputBuffer.ib6 = record[5]
			InputBuffer.ib7 = record[6]
			InputBuffer.ib8 = record[7]
			InputBuffer.ib9 = record[8]
			InputBuffer.ib10 = record[9]
			InputBuffer.ib11 = record[10]
			InputBuffer.ib12 = record[11]
		}
	}
	if err != nil && err != io.EOF {
		fmt.Println(err)
		os.Exit(1)
	}
	end := time.Now()
	fmt.Println(kount, " Records read ")
	fmt.Printf("Normal termination of LANGCOMP2 @ %s\n", end)
	duration := end.Sub(start)
	fmt.Printf("Elapsed time: %s\n", duration)
}

Go READALL example:

package main
import (
    "time"
    "encoding/csv"
    "fmt"
    "os"
)

type InfileRec struct {
	ib1 string
	ib2 string
	ib3 string
	ib4 string
	ib5 string
	ib6 string
	ib7 string
	ib8 string
	ib9 string
	ib10 string
	ib11 string
	ib12 string
}
func main() {
	start := time.Now()
	fmt.Printf("Begin GO run of LANGCOMP @ %s\n", start)

	csvfile, err := os.Open("star.csv")
	if err != nil {
		fmt.Println(err)
		return
	}
    defer csvfile.Close() // sets up the file close upon exit of the function

    reader := csv.NewReader(csvfile)
    reader.FieldsPerRecord = -1 // sets number of fields be record variable

    rawCSVdata, err := reader.ReadAll()

    if err != nil {
       fmt.Println(err)
       os.Exit(1)
    }

    var kount uint32 = 0
	var InputBuffer InfileRec

	for _, each := range rawCSVdata {
		kount += 1
		InputBuffer.ib1 = each[0]
		InputBuffer.ib2 = each[1]
		InputBuffer.ib3 = each[2]
		InputBuffer.ib4 = each[3]
		InputBuffer.ib5 = each[4]
		InputBuffer.ib6 = each[5]
		InputBuffer.ib7 = each[6]
		InputBuffer.ib8 = each[7]
		InputBuffer.ib9 = each[8]
		InputBuffer.ib10 = each[9]
		InputBuffer.ib11 = each[10]
		InputBuffer.ib12 = each[11]
	}
	end := time.Now()
	fmt.Println(kount, " Records read ")

	fmt.Printf("Normal termination of LANGCOMP @ %s\n", end)
	duration := end.Sub(start)
	fmt.Printf("Elapsed time: %s\n", duration)
}