@kyanny's blog

キャンベルスープはいつも飲んでいたからね。毎日二十年間、同じランチを食べたものさ - アンディ・ウォーホル

Go: golint を CI で使うときは -set_exit_status オプションをつける

つけないと lint エラーが検知されても exit status が 0 になり、 CI が pass してしまう。

$ golint -h
Usage of golint:
    golint [flags] # runs on package in current directory
    golint [flags] [packages]
    golint [flags] [directories] # where a '/...' suffix includes all sub-directories
    golint [flags] [files] # all must belong to a single package
Flags:
  -min_confidence float
        minimum confidence of a problem to print it (default 0.8)
  -set_exit_status
        set exit status to 1 if any issues are found

GitHub - golang/lint: [mirror] This is a linter for Go source code.

Go: The Go Playground で TestXxx と ExampleXxx の書き方

The Go Playground で Test & Example がしやすくなった - Qiita に詳しい。

TestXxx

ポイント

  • import "testing" する
  • func main() を書かない
  • func TestXxx() を普通に書く
package main

import (
    "testing"
)

func Hello() string {
    return "Hello"
}

func TestHello(t *testing.T) {
    tests := []struct {
        name string
        want string
    }{
        {name: "#1", want: "Hello"},
        {name: "#2", want: "Goodbye"},
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            if got := Hello(); got != tt.want {
                t.Errorf("Hello() = %v, want %v", got, tt.want)
            }
        })
    }
}
=== RUN   TestHello
=== RUN   TestHello/#1
=== RUN   TestHello/#2
    prog.go:22: Hello() = Hello, want Goodbye
--- FAIL: TestHello (0.00s)
    --- PASS: TestHello/#1 (0.00s)
    --- FAIL: TestHello/#2 (0.00s)
FAIL

2 tests failed.

https://play.golang.org/p/0MHXSA7tnOJ

ExampleXxx

ポイント

  • import "testing" しない
  • func main() を書かない
  • func TestXxx() を書かない
  • func ExampleXxx() を普通に書く
package main

import (
    "fmt"
)

func ExampleHello() {
    fmt.Println("Hello")
    // Output: Hello
}
=== RUN   ExampleHello
--- PASS: ExampleHello (0.00s)
PASS

All tests passed.

https://play.golang.org/p/nMc_5f8-pgB

Go: json.Unmarshal と JSON タグの仕様

これもなぜ調べたか忘れてしまったが、 Go の json.Unmarshal で、

  • JSON タグで空白を含むキーの書き方
  • omitempty はカンマのあとに書くが、ではカンマを含むキーの JSON タグはどう書くのか
  • JSON タグを指定しない場合、構造体のどのフィールドにマッピングされるのか

などが気になって調べたんだったと思う。あと、 JSON タグを書いてるのにうまくマッピングされずに困って調べたような気もする。

結論

  • JSON タグはダブルクォート必須
  • JSON タグが無い場合、 JSON のキーと完全一致または case-insensitive で一致するフィールドにマッピングされる
  • JSON タグには空白を含められるが、空白の位置・数も含めて完全一致が求められる
  • JSON タグにはカンマを含めることができない

UTC と Etc/UTC の違い

違いは無い。同じ UTC を表す。

なぜ表記が異なるのか、については以下の回答が詳しい。曰く、タイムゾーンは一般に Area/Location と表記するが、特定の Area に属さないものの接頭辞として Etc が導入された、という経緯のようだ。

stackoverflow.com

残念ながら、なぜこの URL をメモしておいたのか、なぜ Etc/UTC について調べたのか、そのコンテキストをメモするのは忘れてしまった。 2020-07-06 にメモしていた。

ALTER EGO

一年前の年末年始にやったムシカゴ オルタナティブマーチと同じところが出してるアドベンチャーゲーム。こっちのほうが人気で力作コンテンツっぽいのでやってみた。

ゲームシステムがまさかのクッキークリッカーとだいたい同じで(むしろ放置ゲーと呼ぶべきだろうか)、そのことに気付いてからというもの、それに興奮してストーリーは飛ばし飛ばし読んだ。パッと見てすぐセリフをめくる感じ。それでも視界に入って一応読めてはいた。本もあのくらい速く読めればいいのに。セリフは二行くらいで文字数が少ないからなぁ。

三週目でトゥルーエンド達成。攻略サイトの類は一切見なかった。クリア後解説サイトをみた。七枚目の鏡のバリエーションを見直すのはやらず。拡張コンテンツも未解放。ブースト系課金は両方やった。本はドグラ・マグラだけ未読破。

f:id:a666666:20210104030416j:plain

ALTER EGO は「別人格」という意味の言葉らしい。

ALTER EGO

ALTER EGO

  • Caramel Column Inc.
  • ゲーム
  • 無料

セールで安くなってたスピンオフ作品も買うだけ買った。未プレイ。

ALTER EGO COMPLEX

ALTER EGO COMPLEX

  • Caramel Column Inc.
  • ゲーム
  • ¥370