錯誤的種類
在講這個之前,先提一下主流語言通常「錯誤檢出」方面通常分為三個階段:
- 編譯前階段 (pre-compile time)
- 指的是這個錯誤不需要被編譯即可被檢出
- 很多語言沒有這東西,他需要language server protocol(LSP)支援,如
gopls
- 很多IDE各語言的賣點就是自己獨到的LSP,但是剛好拿來做利子的
C++
擁有非常混亂的LSP實作,常常pre-compile time報錯,但是compile下去沒問題,以及反之….主要也是因為C++
實在是過於複雜。
- 編譯階段 (compile time)
- 指的是這個錯誤在編譯的時候就可以找出來
- 前兩者也可以並稱為compile time,如果沒有要特別指名LSP提供的功能的話。
- 執行階段 (runtime)
- 指的是這個錯誤需要在執行期才會發作
而go是一個滿特殊的語言,他能夠把一些runtime才能檢出的東西藉由gopls
以及go vet
做結構性語法檢查下,將錯誤把runtime提前到pre-compile time。