日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Go: 分布式学习利器(3) -- Go的数据类型和运算符

發(fā)布時(shí)間:2023/11/27 生活经验 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go: 分布式学习利器(3) -- Go的数据类型和运算符 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. Go的數(shù)據(jù)類(lèi)型
      • 1.1 類(lèi)型轉(zhuǎn)化
      • 1.2 類(lèi)型的預(yù)定義
      • 1.3 指針類(lèi)型
    • 2. Go 的運(yùn)算符

1. Go的數(shù)據(jù)類(lèi)型

GO的基本數(shù)據(jù)類(lèi)型如下:

bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // 基本和uint8 類(lèi)型一樣
rune // 代表unicode 的字符編碼,和 uint32類(lèi)似
float32 float64 // 浮點(diǎn)類(lèi)型
complex64 complex128 // 復(fù)數(shù)類(lèi)型

1.1 類(lèi)型轉(zhuǎn)化

Go的類(lèi)型轉(zhuǎn)化和其他語(yǔ)言的主要差異:

  • Go語(yǔ)言不允許隱式類(lèi)型轉(zhuǎn)化
  • 別名和原有類(lèi)型也不能進(jìn)行隱式類(lèi)型轉(zhuǎn)化

比如如下代碼,測(cè)試隱式類(lèi)型轉(zhuǎn)化,go的規(guī)則并不允許

package _typeimport "testing"func TestImplicit(t *testing.T) {var a int = 1var b int64 b = a // 報(bào)錯(cuò),cannot use a (type int) as type int64 in assignmentb = int64(a) // 顯示類(lèi)型轉(zhuǎn)化即可t.Log(a, b)
}

再比如如下測(cè)試代碼, 測(cè)試別名和原有類(lèi)型也不能進(jìn)行隱式類(lèi)型轉(zhuǎn)化

type MyInt int;
func TestOthername(t *testing.T)  {var a int = 1var c MyInt c = a // 使用原有類(lèi)型,不過(guò)是別名,也無(wú)法進(jìn)行隱式類(lèi)型轉(zhuǎn)化c = MyInt(a) // 只有顯式類(lèi)型轉(zhuǎn)換才可以t.Log(a,c)
}

1.2 類(lèi)型的預(yù)定義

Go 支持類(lèi)型的預(yù)定義,比如想要獲取某一種類(lèi)型的最大最小值,可以直接通過(guò)內(nèi)置的預(yù)定義類(lèi)型獲取
比如:

math.MaxFloat64 //最大浮點(diǎn)類(lèi)型
math.MaxUint64 // 最大無(wú)符號(hào)整型
math.MaxInt64 // 最大的整型
...

1.3 指針類(lèi)型

Go的指針類(lèi)型和其他語(yǔ)言的主要差異是:

  • 不支持指針的運(yùn)算(其他語(yǔ)言可以支持指針地址的自加)
  • string 是值類(lèi)型,其默認(rèn)的初始化值為空字符串,而不是nil

如下代碼,測(cè)試指針類(lèi)型的運(yùn)算:

func TestPointer(t *testing.T) {a := 1aPtr := &a // 正常輸出 變量a的地址0xc00001c190aPtr = aPtr + 1 // 指針運(yùn)算會(huì)報(bào)錯(cuò),Fail: aPtr + 1 (mismatched types *int and int)t.Log(a,aPtr)t.Logf("%T %T", a, aPtr)
}

如下代碼,測(cè)試string類(lèi)型:

func TestString(t *testing.T) {var s stringt.Log("*"+s+"*", len(s)) // 字符串是空的,且字符串的長(zhǎng)度為0
}

所以在Go語(yǔ)言中判斷一個(gè)字符串是否為空,不像C語(yǔ)言中if (s == NULL) {} ,而是if s=="" {}

2. Go 的運(yùn)算符

基本的運(yùn)算符和其他語(yǔ)言一樣:算術(shù)運(yùn)算符(+,-,*,/,%,++,–),比較運(yùn)算符(==,!=,>,<,>=,<=),邏輯運(yùn)算符(&&,||,!),位運(yùn)算符(&,|,^,<<,>>)

需要注意的是和其他語(yǔ)言的差異 如下幾點(diǎn):

  • Go語(yǔ)言沒(méi)有前置的 ++ 和 –
  • 支持 == 比較數(shù)組

    要求是:
    相同維數(shù)且含有相同個(gè)數(shù)元素的數(shù)組才可以比較
    每個(gè)元素都相同的才相等

  • Go語(yǔ)言支持按位置零 &^,將右側(cè)值為1 的所有位都置0
    1 &^ 0 = 1
    1 &^ 1 = 0
    0 &^ 1 = 0
    0 &^ 0 = 0
    

關(guān)于數(shù)組的比較測(cè)試如下代碼如下:

func TestArray(t *testing.T) {a := [...]int{1,2,3,4}b := [...]int{1,2,4,3}c := [...]int{1,2,3,4,5}d := [...]int{1,2,3,4}// t.Log(a==b,a==c,a==d) // a==c fail, 不支持不同元素個(gè)數(shù)的數(shù)組比較t.Log(a==b,a==d) // success 
}

輸出如下:

=== RUN   TestArraytype_test.go:43: false true
--- PASS: TestArray (0.00s)

總結(jié)

以上是生活随笔為你收集整理的Go: 分布式学习利器(3) -- Go的数据类型和运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。