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?

Source: https://habr.com/ru/post/J248857/


All Articles