Goの主な利点

平均的な静的Go開発者にGoの利点を尋ねると、ほとんどの場合、おなじみのグッズのリストが聞こえます。 それらについてはすでに多くのことが書かれていますが、非常に頻繁に別のことが回避されます。もっと興味深いのは、言語設計のさまざまなソリューションの長期的な影響です。 このトピックをもう少し広く開きたいと思います。これは、Goだけでなく実際に関連しています。 しかし、この記事では、例として2つの側面を取り上げます。Goでのエラーの処理方法とテストシステム、そして言語設計により人々がより良いコードを書くことを強制する方法を示してみます。







エラー処理



命令型言語では、エラーを報告するための2つの主要なメカニズムがあることをご存知でしょう。例外をスローするか、明示的にコード/値を返す。 ここには2つのキャンプさえあると言うことができます-例外の支持者と明示的な帰還の支持者ですが、すべてがいくらか悪いです。 実際には2つのキャンプがありますが、それらは異なります。コード内のエラー処理の重要性を理解している人と、プログラミングのこの側面をほとんど無視している人です。 さらに、これまでのところ、第2陣営は議論の余地のないリーダーです。



これが「良い」プログラマーを「悪い」プログラマーと区別するものであると仮定するのは論理的であり、間違いなくこれにはいくつかの真実があります。 しかし、一つだけあります。 ツールキット-この場合、それは「プログラミング言語」です-解決します。 あなたの言語で「正しいこと」を行うよりも「間違った」ことをはるかに簡単に行える場合-「[LANG]の書き方」の記事や本の数が役に立たないことを確認してください-人々は間違ったことを続けます。 それは簡単だからです。



すべての小学生はすでに「グローバル変数」が悪であることを知っているようです。 このトピックに関する記事はいくつありますか? それにもかかわらず、今でも2015年には、グローバル変数を使用して大量のコードが見つかります。 なんで?

また、グローバル変数を作成するために、「do it wrong」はほとんどすべてのプログラミング言語で正確に1行かかります。 同時に、「正しいオプション」を作成するには、最小限のラッパーであるため、より多くの時間と労力を費やす必要があります。 さらに1文字があっても-それは決定します。

これは実現するために非常に重要です-ツールキットが決定します。 ツールキットは私たちの選択を形成します。



しかし、エラー処理に戻って、Goの作者が例外を「間違った方法」と見なし、Goでそれらを実装しないことにした理由と、Goの「複数の値を返す」と他の言語の類似する値の違いを理解しようとします。



たとえば、簡単なこと-ファイルを開く。

C ++コードは次のとおりです

ifstream file;
file.open ("test.txt");

      
      





, «» failbit , ifstream.exeptions() try{} catch{} . «» — , « ».



Python:

file = open('test.txt', 'r')

      
      





— open(), . « » « try-catch, --».



( — , C++ Python — , , . «» .)



Go:

file, err := os.Open("test.txt")

      
      





— , «» . error , — Go:

./main.go:8: err declared and not used

      
      





, _, - , :

if err != nil {
	log.Fatal("Aborting: ", err)
}

      
      







«» Go — . , « » — , strconv.Atoi() — — , — , . - .



. — . , .





- , — «» , — . , . «» — ~100% , «» — . — , , .



Go — : . — mycode_test.go , Test:

import "testing"
func TestMycode(t *testing.T) {
}

      
      





. — if-. , .



,

go test

      
      





. -cover, .



game-changer. , « », , « » . , . Go .



, , , , , , , , — . , QA-. «», «» .



. , , — , — . Go — « ». TDD — .





— «» , «». Go KISS- « » ( ) . -, Go .



, , Go.





Why Go gets exceptions right

It's 2015. Why do we still write insecure software?



All Articles