好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > 詳解Go 語(yǔ)言中的比較操作符

詳解Go 語(yǔ)言中的比較操作符

熱門標(biāo)簽:地圖標(biāo)注的汽車標(biāo) 中國(guó)地圖標(biāo)注省會(huì)高清 西部云谷一期地圖標(biāo)注 高德地圖標(biāo)注口訣 學(xué)海導(dǎo)航地圖標(biāo)注 南通如皋申請(qǐng)開通400電話 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng) 廣州呼叫中心外呼系統(tǒng) 浙江高速公路地圖標(biāo)注

這篇文章專注于 6 個(gè)操作符,==,!=,,=,> 和 >=。我們將深入探討它們的語(yǔ)法和用法的細(xì)微差別。對(duì)很多人來(lái)說(shuō),這聽起來(lái)不像是吸引人的事,或者他們可能已經(jīng)從其他編程語(yǔ)言獲得了糟糕的經(jīng)驗(yàn)。然而,在 Go 中它們定義的很好并簡(jiǎn)潔。下面討論的主題,如可比性將出現(xiàn)在其他場(chǎng)合,如 maps。為了使用上述操作符,至少有一個(gè)操作數(shù)需要可賦值給第二個(gè)操作數(shù):

package main
import "fmt"
type T struct {
  name string
}
func main() {
  s := struct{ name string }{"foo"}
  t := T{"foo"}
  fmt.Println(s == t) // true
}

這條規(guī)則顯著縮小了可選范圍:

var a int = 1
var b rune = '1'
fmt.Println(a == b)

類似的代碼在 Javascript 或 Python 中可以運(yùn)行。但在 Go 中它是非法的,并且在編譯時(shí)會(huì)被檢測(cè)到。

src/github.com/mlowicki/lab/lab.go:8: invalid operation: a == b (mismatched types int and rune)

可賦值不是唯一要求。這是相等和順序操作符的規(guī)則……

相等操作符

操作數(shù)需要使用 == 或 != 操作符進(jìn)行比較。哪些方法,哪些值可以被比較?Go 規(guī)范定義的非常明確:

boolean 值可比較(如果倆個(gè)值都是真或假,那么比較結(jié)果被認(rèn)為 true)
整數(shù)和浮點(diǎn)數(shù)比較:

var a int = 1
var b int = 2
var c float32 = 3.3
var d float32 = 4.4
fmt.Println(a == b) // false
fmt.Println(c == d) // false

當(dāng)編譯時(shí) a == d 會(huì)拋出異常( int 和 float32 類型不匹配)因?yàn)樗豢赡苡?int 和 float 比較。

復(fù)數(shù)相等,如果他們的是實(shí)數(shù)和虛數(shù)部分都相等:

var a complex64 = 1 + 1i
var b complex64 = 1 + 2i
var c complex64 = 1 + 2i
fmt.Println(a == b) // false
fmt.Println(b == c) // true

字符串類型值可比較

指針類型值相等,如果他們都是 nil 或都指向相同的變量:

type T struct {
  name string
}
func main() {
  t1 := T{"foo"}
  t2 := T{"bar"}
  p1 := t1
  p2 := t1
  p3 := t2
  fmt.Println(p1 == p2)  // true
  fmt.Println(p2 == p3)  // false
  fmt.Println(p3 == nil) // false
}

不同的 zero-size 變量可能具有相同的內(nèi)存地址,因此我們不假設(shè)任何指向這些變量的指針相等。

a1 := [0]int{}
a2 := [0]int{}
p1 := a1
p2 := a2
fmt.Println(p1 == p2) // might be true or false. Don't rely on it!

通道類型值相等,如果他們確實(shí)一樣(被相同的內(nèi)置 make 方法創(chuàng)建)或值都是 nil:

ch1 := make(chan int)
ch2 := make(chan int)
fmt.Println(ch1 == ch2) // false

接口類型是可比較。與通道和指針類型值比較一樣,如果是 nil 或 動(dòng)態(tài)類型和動(dòng)態(tài)值是相同的:

type I interface {
  m()
}
type J interface {
  m()
}
type T struct {
  name string
}
func (T) m() {}
type U struct {
  name string
}
func (U) m() {}
func main() {
  var i1, i2, i3, i4 I
  var j1 J
  i1 = T{"foo"}
  i2 = T{"foo"}
  i3 = T{"bar"}
  i4 = U{"foo"}
  fmt.Println(i1 == i2) // true
  fmt.Println(i1 == i3) // false
  fmt.Println(i1 == i4) // false
  fmt.Println(i1 == j1) // false
}

比較接口類型的方法集不能相交。

接口類型 I 的 i 和 非接口類型 T 的 t 可比較,如果 T 實(shí)現(xiàn)了 I 則 T 類型的值是可比較的。如果 I 的 動(dòng)態(tài)類型和 T 是相同的,并且 i 的動(dòng)態(tài)值和 t 也是相同的,那么值是相等的:

type I interface {
  m()
}
type T struct{}
func (T) m() {}
type S struct{}
func (S) m() {}
func main() {
  t := T{}
  s := S{}
  var i I
  i = T{}
  fmt.Println(t == i) // true
  fmt.Println(s == i) // false
}
結(jié)構(gòu)類型可比較,所以字段都需要比較。所有非空白字段相等則他們等。
a := struct {
  name string
  _ int32
}{name: "foo"}
b := struct {
  name string
  _ int32
}{name: "foo"}
fmt.Println(a == b) // true

Go 中 數(shù)組是同質(zhì)的 —— 只有同一類型(數(shù)組元素類型)的值可以被存儲(chǔ)其中。對(duì)于數(shù)組值比較,它們的元素類型需要可比較。如果對(duì)應(yīng)的元素相同,數(shù)組就相等。

就是這樣。上面列表很長(zhǎng)但并不充滿驚奇。嘗試了解它在 JavaScript 是如何工作的……

有三種類型不能比較 —— maps, slices 和 functions。Go 編譯器不允許這樣做,并且編譯比較 maps 的程序會(huì)引起一個(gè)錯(cuò)誤 map can only be compared to nil. 。展示的錯(cuò)誤告訴我們至少可以用 maps,slices 或 functions 和 nil 比較。

目前為止,我們知道接口值是可比較的,但 maps 是不可以的。如果接口值的動(dòng)態(tài)類型是相同的,但是不能比較(如 maps),它會(huì)引起一個(gè)運(yùn)行時(shí)錯(cuò)誤:

type T struct {
  meta map[string]string
}
func (T) m() {}
func main() {
  var i1 I = T{}
  var i2 I = T{}
  fmt.Println(i1 == i2)
}
panic: runtime error: comparing uncomparable type main.T
goroutine 1 [running]:
panic(0x8f060, 0x4201a2030)
  /usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
  ...

順序操作符

這些操作符只能應(yīng)用在三種類型:整數(shù),浮點(diǎn)數(shù)和字符串類型。這沒有什么特別的或 Go 特有的。值得注意的是字符串是按字典順序排列的。byte-wise 一次一個(gè)字節(jié)并沒有 Collation 算法。

fmt.Println("aaa"  "b") // true
fmt.Println("ł" > "z")  // true

結(jié)果

任何比較操作符的結(jié)果都是無(wú)類型布爾常量(true 或 false)。因?yàn)樗鼪]有類型,所以可以分配了給任何布爾變量:

var t T = true
t = 3.3  5
fmt.Println(t)

這段代碼輸出 true。另一個(gè),嘗試分配 bool 類型的值:

var t T = true
var b bool = true
t = b
fmt.Println(t)

產(chǎn)生一個(gè)錯(cuò)誤,不能使用 b (bool類型)分配給 T 類型。

總結(jié)

以上所述是小編給大家介紹的Go 語(yǔ)言中的比較操作符,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • MongoDB 管道的介紹及操作符實(shí)例
  • 基于MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)類型和$type操作符詳解

標(biāo)簽:保定 德宏 常州 曲靖 許昌 吐魯番 貴州 東營(yíng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Go 語(yǔ)言中的比較操作符》,本文關(guān)鍵詞  詳解,語(yǔ)言,中的,比較,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Go 語(yǔ)言中的比較操作符》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解Go 語(yǔ)言中的比較操作符的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 98bb国产精品视频| 吻胸揉腿捏屁股娇喘视频在线播放| 欧美国产一区二区二区| 无码欧精品亚洲日韩一区二区三区| 韩国电影三级在公交车上| free性丰满4khd性欧美| 亚洲精品国产福利无码爆料网 | 一级强奷毛B一片| 男女后进式猛烈XXOO| 老师让女班长脱了内裤打屁股作文| 黄色69视频| 国产亚洲精品久久久久久移动网络| 日本一级无码爽A片免费丁给片| 欧美午夜精品一区区电影| 欧美videos另类精品| 香蕉在线精品一区二区| 国产精品无码亚洲AⅤ| 欧美一级大黄大黄大色毛片小说| 蘑菇视频在线看| 成人免费在线| 办公室娇喘的短裙校花| 午夜精品一区二区在线观看的| 男人吃奶摸下面弄进去会怀孕吗| 91直播app软件下载ios| 后进式摇摇乳猛烈XXOO动漫 | 香蕉69精品视频在线观看| 亚洲小视频在线观看| 国产一级婬片A片免费放女人屎| 91免费播放人人爽人人快乐| asian国模人体pics| 遭黑人疯狂蹂躏mp4| 日本护士肉体取精| 女人的战争| 91在线午夜福利精品| 进来吧今天英语老师就是你的 | 啊?学长?好硬?拔出来?罗莉岛| 韩国电影《教室爱欲》| 日本妇人成熟免费观看18| japanesevideo国产在线| 国产精品66在线观看| 1为什么喜欢0吞精|