Skip to content

v0.1.4

Latest

Choose a tag to compare

@tomoemon tomoemon released this 13 Oct 11:14
a38e1f4

Go 1.27 の昇格したフィールドの書き方に、規約と flow ツールを合わせた。

規約の本文(rule/decision-pattern.md)が変わったので、規約バージョンは v0.1.4 になる。本文だけを取り込んでいる場合も取り込み直す。

規約: その段で確定させる事実は昇格したフィールドで書く

Go 1.27 から、埋め込んだ struct のフィールドを composite literal に直接書ける。go fix(modernize の embedlit)は入れ子のリテラルをこの形に書き換えるので、規約の例をこちらに揃えた。

// これまで
return XxxNeedBlock{
    xxxFactsArticle: xxxFactsArticle{ArticleID: article.ID, AuthorID: article.AuthorID},
}

// これから(Go 1.27 以降)
return XxxNeedBlock{
    ArticleID: article.ID,
    AuthorID:  article.AuthorID,
}
  • 型の定義では、これまでどおり事実の struct を埋め込む
  • 前段から引き継ぐ事実は、これまでどおり xxxFactsArticle: s.xxxFactsArticle と struct ごと渡す
  • Go 1.26 以前は入れ子のリテラルで書く

exhaustruct による書き漏らしの検出も、この書き方に合わせて説明を直した。引き継ぎの漏れは struct 1 つの欠落として、その段で確定させる事実の漏れは足りないフィールドとして出る。

flow: 昇格したフィールドで書いた事実が終端のラベルに載っていた

終端のラベルからは埋め込んだ事実を除いているが、判定がキーが埋め込みのフィールド名のときにしか効いていなかった。昇格したフィールドで書くと事実がラベルに載り、事実の値が経路ごとに違うと、同じ結末の終端が別々のノードに割れていた。

これまで:  n1(["Decided<br/>- UserID: id<br/>- Done: true"])
これから:  n1(["Decided<br/>- Done: true"])

入れ子で書いた場合の出力は変わらない。

Full Changelog: v0.1.3...v0.1.4