go學習筆記

最近使用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)

有幾個關鍵點:性能

  • Go不支持運算符重載,所以須要先將 a<b 在函數外轉換爲 bool 條件
  • Go不支持泛型,只能用 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
View Code

若是是已經定義的變量,能夠省略:,不然不能省略。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

相關文章
相關標籤/搜索