競技プログラミングでGo言語を使い始めた時につまづいたこと

この記事は、マイナビ Advent Calendar 2019 9日目の記事となります。

概要

AtCoderでGo言語を使い始めた時に、つまづいたことについてまとめました。

バージョン1.6がmacOSで使用できない

2019年12月8日時点のジャッジシステムにおいて、Go言語の処理系はバージョン1.6です。

https://atcoder.jp/contests/abc147/rules

新しいバージョンだと、使用できる標準モジュールが異なるため、AtCoder用に1.6の環境も用意しようとしました。

macOS Mojave(バージョン10.14)で検証

動作確認用のコード(Hello World)

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World")
}

バージョン1.11では正常に動作します。

$ goenv global 1.11.4
$ go version
go version go1.11.4 darwin/amd64
$ go run hello.go
Hello World

しかし以下のように、バージョン1.6では「Segmentation fault」になります。

$ goenv install 1.6.4
$ goenv global 1.6.4
$ go run hello.go
Segmentation fault: 11

公式のリポジトリで同じ問題に遭遇しているissueがありました。

cmd/go: segmentation fault on macOS 10.13.4 #24679

そしてこんなコメントが。

macOS Sierra(バージョン10.12)以降では、goの1.10.1以前のバージョンが動かないとのこと。

Please make sure you upgrade to go 1.10.1. Earlier versions of Go are
incompatible with changes to the kernel interface in Sierra and later.

1.6で動作確認したい場合は、コンテストページのコードテストから実施するしかない模様

https://atcoder.jp/contests/abc147/custom_test

補足

ジャッジサーバの処理系がアップデートされたら、上記問題は解決しそうです。

AtCoderの言語アップデートに関して