最近使用golang刷題,新語言仍是有不少細節和C++不同的點,golang爲了保持語言的簡潔可讀性,少了不少工具性語法,對於C++ er而言初期真坑!入門容易,熟練仍是得多寫代碼。golang
1. 缺乏三目運算符 ?:安全
官方FAQ給出的解決方法是最low的if串聯,go語言不具有C++的泛型和重載功能。ide
目前能搞定的解法,就是本身實現一個內聯函數。函數
Go語言中能夠模擬一個更普通的函數(If
的首字母大寫,是函數名,不是 if
關鍵字):工具
func If(condition bool, trueVal, falseVal interface{}) interface{} { if condition { return trueVal } return falseVal } a, b := 2, 3 max := If(a > b, a, b).(int) println(max)
有幾個關鍵點:性能
a<b
在函數外轉換爲 bool
條件interface{}
模擬.(type)
的類型必須匹配interface{}
是運行時泛型,性能沒有編譯時泛型高2 類型轉換----go不存在隱式類型轉換功能,必須明確的進行顯式類型轉換(爲了類型安全)ui
參考連接spa
變量類型轉換的基本格式以下:.net
<變量A>[:] = <變量A的類型>(<變量B>)
var a int var f float32 = 3.14 a = int(f) b := int(f) + 1
若是是已經定義的變量,能夠省略:,不然不能省略。3d
類型的兼容性:
3 golang整數的最大和最小值
go沒有最大和最小值的常量值,須要本身實現=_=,基於位運算進行操做。
//無符號整數 const UINT_MIN uint = 0 const UINT_MAX = ^uint(0)//18446744073709551615 //有符號整數 /*根據補碼,其最大值二進制表示,首位0,其他1*/ const INT_MAX = int(^uint(0) >> 1) /*根據補碼,其最小值二進制表示,首位1,其他0*/ const INT_MIN = ^INT_MAX
-9223372036854775808
9223372036854775807