引數太靈活容易出錯

2021-10-08 23:24:46 字數 817 閱讀 7812

引數太靈活容易出錯

(金慶的專欄 2020.7)

golang中可以將引數型別設為 inte***ce{}, 這樣就可以傳入任意型別的引數,

和 c++ 中 void* 的作用相似。

但是這種萬能型別應該盡量少用,盡量使用具體的型別,或者使用乙個具體的介面型別。

主要的原因是, 讓編譯期的型別檢查擋住編碼錯誤,減少執行期的錯誤。

例如,go-mongo-driver 有個建立索引的引數:

type indexmodel struct 

...}

其中 keys 可以是任意型別,如 1234, 「abcd」, 當然不符合索引要求的型別會返回失敗。

但是 bson.m 型別,會建立索引成功,但是索引的次序會有錯誤。

注釋中已指出,不要用 bson.m, 應該使用 bson.d.

正確的 keys 如下,表示復合索引 (field1, field2),1表示正序,-1則反序:

indexmodel.keys := bson.d, }
如果使用 bson.m, 實際上是個 map:

indexmodel.keys := bson.m
因為 map 成員的次序不定,最後建立的索引可能是 (field1, field2),也可能是 (field2, field1)。

此處型別允許 inte***ce{} 的想法是,允許任意型別,會 bson 編碼後傳給 mongo 伺服器,並不會進行型別檢查。

這種靈活性非常容易造成錯誤,並且如何使用也不明確, 僅靠注釋作用很小。

python 太靈活 Python中的靈活引數

別這樣!但如果你還想,我建議你有乙個中間類或函式來處理這個問題 偽 def printthenumber num print num def intermediateprintthenumber input num int dict 或者,在更糟的情況下,one 甚至可能更糟 這應該由乙個只負責處理...

容易出錯的 if 語句

下面列舉幾個容易出錯的if語句例項,如果後續還有新的發現,還會繼續更新!int n 5 if n 0 printf 值為正 初次執行,感覺一切正常,沒有錯誤,這時我把n的值改為 5重新編譯後,結果還是為正。這是為什麼?仔細一瞧,我們發現在 n 0 後面我們多加了個分號!原因 只有乙個分號的語句叫做空...

C 容易出錯的點

1 c風格字串的兩種形式 1 char a 手動新增結束符 0 2 char a abv 預設新增 0 2 sizeof 返回的值表示的含義如下 單位位元組 陣列 編譯時分配的陣列空間大小 指標 儲存該指標所用的空間大小 儲存該指標的位址的長度,是長整型,應該為4 型別 該型別所佔的空間大小 物件 ...