如何在CLion上用Rust玩LeetCode

之前花了不少時間在goland上跑起leetcode plugin,需要一些設定才可以讓整個goland跑起來。現在多了一個Rust可以玩解題,那我們首先還是要先把整個環境搭起來啦!

需要條件

  • CLion。官方Rust套件是比較prefer CLion,我不太確定其他的JetBrains系列IDE能不能跑,反正我是用CLion跑起來就是了。
  • Cargo/rustc 這在裝官方的rust套件應該就已經裝上去了。如果你不知道這是啥的話,先把rust學熟在想著用rust解題吧….
  • IntelliJ Rust Plugin,雖然官方建議用CLion跑,不過看這名字….應該可以在IntelliJ跑起來?
  • LeetCode Editor or LeetCode Editor Pro ,兩者其實差異不大,只差在後者login比較方便,前者要去找session ID。我是覺得他對我幫助很大,我就付費支持啦。
Read more “如何在CLion上用Rust玩LeetCode”
itemprop="discussionURL"Leave a comment

Go 1.18:Generic and Fuzz

錯誤的種類

在講這個之前,先提一下主流語言通常「錯誤檢出」方面通常分為三個階段:

  • 編譯前階段 (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。

Read more “Go 1.18:Generic and Fuzz”
itemprop="discussionURL"Leave a comment

用tag實作Password Mask

我其實滿驚訝目前好像沒有任何library有實作這個,或者有但是我找不到,所以我就實作了一個。別看這功能看起來很小巧簡單,這個需要對reflect有相當的認識,所以把製作心得記錄下來。

成品網址

https://github.com/Rayer/hood

需求

通常我們server boot up的時候需要印出很多log,有時候無可避免的要把整個config給印到log上,這樣會產生一個問題:要是config內含敏感資訊,如帳號跟密碼,這就會產生一些資安問題:

log.Infof("bootup with config : %+v", config)

印出來就會像這樣(標準的%+v會印出來的格式)

{Host:192.168.1.1 User:username Password:mypassword123}


顯然,這是不太恰當的,所以我們總歸來講有幾種作法

  1. 把他轉json再印,把敏感的地方用 json:"-"讓他不被印出來
  2. 實作 func String() string,把敏感資料手動by key抹除掉
Read more “用tag實作Password Mask”
itemprop="discussionURL"Leave a comment