从一道面试题来谈谈Golang中的 ==
写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是面试还是日常的工作中,都会经常遇到,所以还是特意写一篇文章,记录下自己对Golang中==
的理解。如文章中出现不对的地方,请不吝赐教,谢谢。
1、面试题注意,以下文章内容是基于 go1.16.4 进行演示的,如果和你验证时,结果不一致,可能 Go 的判断规则有所改变。
(资料图)
大家可以先不看结果,想想答案,再看后面的结果以及相关的分析。
type T interface {}func main() {var (t Tp *Ti1 interface{} = ti2 interface{} = p)fmt.Println(i1 ==t, i1 == nil)fmt.Println(i2 ==p, i2 == nil)fmt.Println(t == nil)fmt.Println(p == nil)}
执行结果:
true truetrue falsetruetrue
分析:
1、interface 值由动态类型
和动态值
组成。只有在类型
和值
都相同时才相等。接口变量i1
是接口类型的零值,也就是它的类型和值部分都是nil
,接口变量i2
的动态值虽然是零值,但是动态类型为 *T
。2、变量 t、p 都没有初始化,未分配内存,所以 变量t、p 都等于 nil。
2、Golang中的数据类型对于上面的描述不太清楚的同学,不用着急,我们一起来学习 Golang 中的
==
,有较为详细的介绍。
Golang中的数据类型分为4大类
,他们分别是:
int/uint/int8/uint8/int16/uint16/int32/uint32/int64/uint64/byte/rune
等)、浮点数(float32/float64
)、复数类型(complex64/complex128
)、字符串(string
)、布尔(true/false)。这些是Go语言内置的基本数据类型,它们是Go语言的原始数据类型,不能再细分。复合类型 (Composite types):又叫聚合类型。包括数组、结构体
。复合类型允许将多个值组合成一个新的数据结构。引用类型 (Reference types):这些类型在内存中存储的是数据的地址,包括 指针、切片(slice)、映射(map)、通道(channel)、函数类型(func)
。引用类型允许在函数间共享和修改数据。接口类型 (Interface types):接口类型是一种抽象类型,它定义了对象的行为,而不关心对象的具体类型。通过实现接口,可以实现多态性和代码复用。比如 error
。其实接口类型可以看作是引用类型,在 Go 中,接口类型是一种特殊的引用类型,它包含一个指向实际数据的指针以及类型信息。当你将一个具体类型的值赋给接口变量时,接口会存储一个指向实际数据的指针或实际数据的拷贝。因此,接口可以看作是对其他类型的引用,而不是直接包含实际数据。
在Go语言中,自定义类型属于基本类型
的概念中。
自定义类型属于基本类型的一种,它通过使用 type 关键字来创建新的类型,底层使用基本数据类型。通过自定义类型,我们可以为基本类型赋予更多语义,并且可以为它们定义自己的方法。自定义类型和其他基本类型具有相同的操作和运算规则,但在类型系统中它们是不同的类型。
例如使用
type number int64
时,我们自定义了一种数据类型,叫做number
。虽然它底层使用了int64
,但在类型系统中,number
和float64
是不同的类型。
在Go语言中,还有一种类型别名
的叫法,是 Go1.9 引用的新功能。
类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型。
例如:
type byte = uint8type rune = int32
==
操作最重要的一个前提是:两个操作数类型必须相同!!!
3、四大类型如何使用 ==3.1、基本类型golang 的类型系统非常严格,没有
C/C++/python
中的隐式类型转换。这个需要注意。
基本类型的比较,就比较简单直观,直接使用==
判断就好了,注意的是Go中并没有隐式转换,而且类型一致才可以
。
package mainimport "fmt"func main() {var a int64var b int64var c int32fmt.Println(a == b)fmt.Println(c)// Invalid operation: a == c (mismatched types int64 and int32)//fmt.Println(a == c)}
接下来我们看看浮点数的比较:
package mainimport "fmt"func main() {var a float64 = 0.1var b float64 = 0.2var c float64 = 0.3fmt.Println(a + b) // 0.30000000000000004fmt.Println(a+b == c) // false}
是不是有点小惊讶,这个是因为Go 中的 浮点数遵循 IEEE 754 标准,所以会有有些浮点数不能精确表示,浮点运算结果会有误差。
想大概了解计算机是如何表示浮点数的可以看看下面的文章,有一个基础的了解。
数字编码
注意:
浮点数做 判等 操作一般是使用 计算两个浮点数的差的绝对值,如果小于一定的值就认为它们相等,比如
1e-9
。
package mainimport ("fmt""math")func main() {var a = 0.1var b = 0.2var c = 0.3fmt.Println(a + b) // 0.30000000000000004fmt.Println(math.Abs((a+b)-c) < 1e-9) // truefmt.Printf("%T", a) // float64}
3.2、复合类型合类型也叫做聚合类型。golang 中的复合类型只有两种:数组和结构体
。它们是逐元素/字段比较的。
注意:数组的长度视为类型的一部分,长度不同的两个数组是不同的类型,不能直接比较。
对于数组来说,依次比较各个元素的值。根据元素类型的不同,再依据是基本类型、复合类型、引用类型或接口类型,按照特定类型的规则进行比较。所有元素全都相等,数组才是相等的。对于结构体来说,依次比较各个字段的值。根据字段类型的不同,再依据是 4 中类型中的哪一种,按照特定类型的规则进行比较。所有字段全都相等,结构体才是相等的。注意:如包含了不支持直接使用 == 符号的类型,在编译阶段会报错。
例如:
package mainimport "fmt"type Student struct {Name stringAge intSex bool}type S1 struct {Name stringScores []int8 // 注意这里定义的是 slice 类型}type ITest interface{}func main() {arrayA := [...]int64{2, 3, 4}arrayB := [...]int64{2, 3, 4}arrayC := [...]int64{1, 3, 4}fmt.Println(arrayA == arrayB) // truefmt.Println(arrayB == arrayC) // falsefmt.Println("-------")s1 := Student{"xiaoming", 18, false}s2 := Student{"xiaoming", 18, false}s3 := Student{"xiaowang", 18, false}fmt.Println(s1 == s2) // truefmt.Println(s1 == s3) // falsefmt.Println("-------")a1 := [...]Student{s1, s2}// 注意这两个元素!a2 := [2]Student{s2, s2}a3 := [2]Student{s2, s3}fmt.Println(a1 == a2) // truefmt.Println(a3 == a2) // falsefmt.Println("-------")var i1 ITest = 23var i2 ITest = 23var i3 ITest = "tt"var i4 ITest = 23fmt.Println(i1 == i2) // truefmt.Println(i3 == i4) // falseis1 := [...]ITest{i1, i2}is2 := [...]ITest{i1, i4}is3 := [...]ITest{i1, i3}fmt.Println(is1 == is2) // truefmt.Println(is1 == is3) // falsefmt.Println("-------")t1 := S1{"xw", []int8{66, 88}}t2 := S1{"xw", []int8{66, 88}}t3 := S1{"xw", []int8{66, 99}} // 为什么这里会报错呢,因为我们定义的结构体中的 Score 字段是 slice, slice 是不支持使用 == 符号的// Invalid operation: t1 == t2 (the operator == is not defined on S1)//fmt.Println(t1 == t2)// Invalid operation: t1 == t2 (the operator == is not defined on S1)//fmt.Println(t1 == t3)// go 中 slice 使用 reflect.DeepEqual 判断是否相等fmt.Println(reflect.DeepEqual(t1, t2)) // truefmt.Println(reflect.DeepEqual(t1, t3)) // false}
3.3、引用类型引用类型是指那些底层数据结构的值是引用地址(指针)的类型
。它们在内存中存储的是指向实际数据的指针,而不是实际数据本身。切片、映射、通道和函数都是引用类型,因为它们在底层都使用了指针来引用实际的数据。
引用类型的比较实际判断的是两个变量是不是指向同一份数据,它不会去比较实际指向的数据。
关于引用类型,有几个比较特殊的规定:
切片之间不允许比较。切片只能与nil
值比较。map
之间不允许比较。map
只能与nil
值比较。函数
之间不允许比较。函数
只能与nil
值比较。接下来我们在仔细看看各个类型的具体介绍。
3.3.1、指针package mainimport ("fmt")type Student struct {Name stringAge intSex bool}func main() {s1 := &Student{"xiaoming", 18, false}s2 := &Student{"xiaoming", 18, false}s3 := s1fmt.Println(s1 == s2) // falsefmt.Println(s1 == s3) // true}
s1 和 s2 虽然数据一样,但是他们在内存中的地址并不相等,所以他们是不相等的,s1 和 s3 指向的是同一份内存地址,所以是相等的。
3.3.2、channel 和 函数类型接下来我们再看看 channel 和 函数类型:
package mainimport "fmt"type Student struct {Name stringAge intSex bool}func main() {ch1 := make(chan bool, 1)ch2 := make(chan bool, 1)ch3 := ch1fmt.Println(ch1 == ch2) // falsefmt.Println(ch1 == ch3) // truefmt.Println("-----")a := TestFuncb := TestFuncc := a// invalid operation: a == b (func can only be compared to nil)//fmt.Println(a == b)// invalid operation: a == c (func can only be compared to nil)//fmt.Println(a == c)fmt.Println(a) // 0x10a3400fmt.Println(b) // 0x10a3400fmt.Println(c) // 0x10a3400}func TestFunc() {}
从上面可以看出来,函数类型不支持直接判等操作。原因是:函数类型不支持直接的判等操作是因为函数类型是一种复杂的类型,它包含了函数的签名和实现代码等信息。由于函数可以是闭包,可能捕获了外部变量,因此函数的判等操作会涉及到比较函数的底层实现和捕获的变量等细节,这会导致判等操作的复杂性和不确定性。
3.3.3、slice所以从中也可以看出来 Go 中判断引用类型是否相等,不是简单的判断变量所在的内存地址是否一致,而是根据相应的类型,有不同的判断规则,这里大家需要注意。
再看看切片。因为切片是引用类型,它可以间接的指向自己。例如:
a := []interface{}{ 1, 2.0 }a[1] = afmt.Println(a)// !!!// runtime: goroutine stack exceeds 1000000000-byte limit// fatal error: stack overflow
上面代码将a
赋值给a[1]
导致递归引用,fmt.Println(a)
语句直接爆栈。
基于上面两点原因,golang 直接规定切片类型不可比较。使用==
比较切片直接编译报错。
例如:
var a []intvar b []int// invalid operation: a == b (slice can only be compared to nil)fmt.Println(a == b)
如果实在是需要判断 slice 中元素是否相等,我们一般是自定义一个 判断函数或者使用reflect.DeepEqual
函数。
package mainimport ("fmt""reflect")func slicesAreEqual(slice1, slice2 []int) bool {if len(slice1) != len(slice2) {return false}for i := 0; i < len(slice1); i++ {if slice1[i] != slice2[i] {return false}}return true}func main() {slice1 := []int{1, 2, 3}slice2 := []int{1, 2, 3}slice3 := []int{4, 5, 6}fmt.Println(reflect.DeepEqual(slice1, slice2)) // 输出: false (reflect.DeepEqual 可以进行值相等判断)fmt.Println(slicesAreEqual(slice1, slice2)) // 输出: truefmt.Println(slicesAreEqual(slice1, slice3)) // 输出: false}
3.3.4、map注意,在上面的示例中,我们自定义了
slicesAreEqual
函数来判断两个切片是否拥有相同的元素。这个示例中我们使用了reflect.DeepEqual
来进行值相等的判断,但是不推荐在切片的值相等判断中使用reflect.DeepEqual
,因为它会将切片的元素逐个进行深度比较,效率较低,尤其在切片较大时。通常最好手动遍历比较切片的元素。
在 Go 中,map
类型不支持直接的判等操作是因为 map
是一个引用类型,并不存储在变量中的实际数据,而是一个指向底层数据结构的指针。map
是一种哈希表的实现,它包含了键值对的集合。
在 Go 中,map
是一个引用类型,类似于切片、通道和函数等。当你将一个 map
赋值给另一个变量时,它们引用同一个底层的 map
数据。因此,两个 map
可能引用相同的底层数据,但它们仍然是不同的 map
对象。直接比较两个 map
是否相等,并不能确定它们是否引用同一个底层数据。
如果你需要判断两个 map
是否包含相同的键值对,你可以通过手动遍历比较 map
的键值对来实现。这涉及到比较每个键值对的键和值是否相等。
如果实在是需要判断两个map
是否相等,我们可以使用自定义函数来判断两个 map
是否包含相同的键值对的示例:
package mainimport ("fmt""reflect")func mapsAreEqual(map1, map2 map[string]int) bool {if len(map1) != len(map2) {return false}for key, value := range map1 {if map2Value, ok := map2[key]; !ok || map2Value != value {return false}}return true}func main() {map1 := map[string]int{"a": 1, "b": 2, "c": 3}map2 := map[string]int{"a": 1, "b": 2, "c": 3}map3 := map[string]int{"a": 1, "b": 2, "c": 4}fmt.Println(reflect.DeepEqual(map1, map2)) // 输出: false (reflect.DeepEqual 可以进行值相等判断)fmt.Println(mapsAreEqual(map1, map2)) // 输出: truefmt.Println(mapsAreEqual(map1, map3)) // 输出: false}
在上面的示例中,我们自定义了mapsAreEqual
函数来判断两个 map
是否包含相同的键值对。请注意,与前面提到的reflect.DeepEqual
一样,我们也不推荐在 map
的值相等判断中使用reflect.DeepEqual
,因为它会将 map
的键值对逐个进行深度比较,效率较低,尤其在 map
较大时。通常最好手动遍历比较 map
的键值对。
以下内容来自后面的参考链接 深入理解Go之== ,十分感谢原博文作者。
接口类型的值可以是任意一个实现了该接口的类型值,所以接口值除了需要记录具体值之外,还需要记录这个值属于的类型。也就是说接口值由“类型”和“值”组成,鉴于这两部分会根据存入值的不同而发生变化,我们称之为接口的动态类型
和动态值
。
接口值的比较涉及这两部分的比较,只有当动态类型完全相同且动态值相等(动态值使用==
比较),两个接口值才是相等的。
package mainimport "fmt"func main() {var a interface{} = 1var b interface{} = 2var c interface{} = 1var d interface{} = 1.0fmt.Println(a == b) // falsefmt.Println(a == c) // truefmt.Println(a == d) // false}
a
和b
动态类型相同(都是int
),动态值也相同(都是1
,基本类型比较),故两者相等。 a
和c
动态类型相同,动态值不等(分别为1
和2
,基本类型比较),故两者不等。 a
和d
动态类型不同,a
为int
,d
为float64
,故两者不等。
package mainimport "fmt"func main() {type A struct {a intb string}var aa interface{} = A{a: 1, b: "test"}var bb interface{} = A{a: 1, b: "test"}var cc interface{} = A{a: 2, b: "test"}fmt.Println(aa == bb) // truefmt.Println(aa == cc) // falsevar dd interface{} = &A{a: 1, b: "test"}var ee interface{} = &A{a: 1, b: "test"}fmt.Println(dd == ee) // false}
aa
和bb
动态类型相同(都是A
),动态值也相同(结构体A
,见上面复合类型的比较规则),故两者相等。 aa
和cc
动态类型相同,动态值不同,故两者不等。 dd
和ee
动态类型相同(都是*A
),动态值使用指针(引用)类型的比较,由于不是指向同一个地址,故不等。
注意:
如果接口的动态值不可比较,强行比较会panic
!!!
var a interface{} = []int{1, 2, 3, 4}var b interface{} = []int{1, 2, 3, 4}// panic: runtime error: comparing uncomparable type []intfmt.Println(a == b)
a
和b
的动态值是切片类型,而切片类型不可比较,所以a == b
会panic
。
接口值的比较不要求接口类型(注意不是动态类型)完全相同,只要一个接口可以转化为另一个就可以比较。例如:
package mainimport ("fmt""io""os")func main() {var f *os.Filevar r io.Reader = fvar rc io.ReadCloser = ffmt.Println(r == rc) // truevar w io.Writer = f// invalid operation: r == w (mismatched types io.Reader and io.Writer)fmt.Println(r == w)}
type ReadCloser interface {ReaderCloser}
r
的类型为io.Reader
接口,rc
的类型为io.ReadCloser
接口。查看源码,io.ReadCloser
的定义如下:
io.ReadCloser
可转化为io.Reader
,故两者可比较。
而io.Writer
不可转化为io.Reader
,编译报错。
不可比较性:
前面说过,golang 中的切片类型、map类型、函数类型(func)
是不可比较的。所有含有切片的类型都是不可比较的。例如:
不可比较性会传递,如果一个结构体由于含有切片字段不可比较,那么将它作为元素的数组不可比较,将它作为字段类型的结构体不可比较。
package mainimport "fmt"func main() {type T struct {a map[string]bool}t1 := T{a: map[string]bool{"ni": true},}t2 := T{a: map[string]bool{"ni": true},}// invalid operation: t1 == t2 (struct containing map[string]bool cannot be compared)fmt.Println(t1 == t2)type T1 struct {a func()}t3 := T1{a: func() {},}t4 := T1{a: func() {},}// invalid operation: t1 == t2 (struct containing func() cannot be compared)fmt.Println(t3 == t4)}
关于引用类型,有几个比较特殊的规定:
切片之间不允许比较。切片只能与nil
值比较。map
之间不允许比较。map
只能与nil
值比较。函数
之间不允许比较。函数
只能与nil
值比较。参考链接:
Go语言基础之接口
4、interface
深入理解Go之==
标签:
相关推荐
-
从一道面试题来谈谈Golang中的 ==
写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是 -
医药反腐风暴:这次不一样
医药反腐风暴:这次不一样 -
郑州打响“认房不认贷”第一枪:有业主直接降价抢跑,中介断言房价很难大涨
郑州打响“认房不认贷”第一枪:有业主直接降价抢跑,中介断言房价... -
苏锦街道爱心暑托班结业 孩子们为老师送上感谢信
本报讯(记者李渊通讯员冯莉莺)“这一个月我非常开心!我喜欢这里... -
蔚来首款手机入网工信部:7000元起步
近日,蔚来首款手机已正式入网工信部,由蔚来移动科技有限公司申请,这 -
反腐败转作风!银川开展为期3年专项治理行动
银川新闻网讯(记者梁小雨)按照乡村振兴领域腐败和作风问题专项治理及 -
甘肃肃南:藏乡文化靓 笑迎八方客
8月2日,甘肃省张掖市肃南裕固族自治县马蹄藏族乡以“藏乡儿女心向... -
我市重拳整治旅游市场秩序
昨日,呼和浩特晚报记者从市文化市场综合行政执法局了解到,根据今年以 -
官宣!这个特大城市,打响第一枪
官宣!这个特大城市,打响第一枪 -
重庆市巫山县2023-08-05 11:23发布高温橙色预警
一、重庆市巫山县天气预报巫山县气象台2023年8月5日11时15分发布“高温 -
为什么说湖北是中国位置最好的省份,武汉是中国位置最好的省会
武汉市在历史上就已经有“九省通衢”的美名,当时的“九省通衢”是... -
气温创今夏新高,局地破40℃!湖北继续发布高温橙色预警
据湖北省气象局统计,昨天(4日)湖北大部地区气温创今夏以来新高,全 -
涿州急缺这些应急物资:发电机、抽水泵、对讲机、应急照明
7月29日以来,北京市门头沟区、房山区和河北省涿州市遭受了巨大汛情冲 -
河北保定涞水县284个村受灾,野三坡景区共转移2.6万人
受强降雨影响,河北保定涞水县15个乡镇、284个村受灾。其中野三坡景区 -
世界机器人大会将于本月16日启幕
一场机器人产业盛会即将在京上演。2023世界机器人大会将于8月16日至22 -
市医保局提醒:“亲情账户”“家庭共济”勿混淆
办理医保业务时,经常有参保人混淆医保个人账户家庭共济和医保亲情账户 -
各省GDP增速:上海、海南领跑,江西、广西垫底
当我们在说GDP增速时,通常有以下两种方法:一,同比实际增速,指扣除 -
瞄准三大关键领域 搭建一流科研平台 前湾新区攻坚新能源汽车核心技术
体积小、充电快,功率密度大幅提升。日前,在宁波前湾新区举行的浙江省 -
周末两天内蒙古大部天气晴好,局地有分散不均的降水和短时强对流出现
本周末(8月5日至6日),全区依然有分散不均的小雨或雷阵雨天气,主要 -
呼和浩特市被授予“中国奶业育种之都”
在5日举行的世界奶业大会上,中国奶业协会授予呼和浩特市“中国奶业... -
好消息!内蒙古体育馆8月7日~8日免费开放
记者从内蒙古体育馆了解到,在8月8日全民健身日来临之际,该馆将于8月7 -
本周生猪价格大涨超10%,创今年以来新高
本周生猪价格大涨超10%,创今年以来新高 -
电影《封神第一部》票房突破14亿,成为中国内地电影历史总榜第60名
根据最新数据,电影《封神第一部》的票房已经突破14亿,成为中国内地电 -
中国天眼500米口径球面射电望远镜清洗机器人系统项目通过验收
被誉为“中国天眼”的500米口径球面射电望远镜FAST,是我国自主知识... -
云南南华:万人打跳“阿苏嗻”
身着盛装的群众在打跳“阿苏嗻”。人民网记者李发兴摄人民网楚雄8月... -
CBD街企共治告别快递摆摊
快递小哥在楼下摆摊,既影响景观,取件秩序也乱,这是很多写字楼面临的 -
顺义开展应急志愿者培训
顺义区应急局近日开展应急志愿者服务技能提升培训。未来3个月内,顺义 -
门头沟:通信全线贯通,初步恢复所有乡镇通信
记者从中国电信获悉,8月4日22时52分,中国电信采用卫星车,成功恢复北 -
94.6%涉网暴案件构成侵权
8月2日,北京互联网法院通报该院涉网络暴力案件审判情况。自2018年9月 -
翻越高速护栏摔伤 老人被判自负其责
年近八旬的张老太和女儿、女婿乘坐网约车前往公园游玩,车辆行驶至高速 -
上半年全国可再生能源新增装机逾1亿千瓦 新型储能装机规模持续快速提升
记者近日从国家能源局获悉,今年以来,全国可再生能源装机规模实现新突 -
加拿大江苏总商会参访南京国家农业科创中心
8月3日下午,加拿大江苏总商会会长王海澄会长率领副会长黄昕、常务理事 -
新功能加持!Nothing OS 2.0.2让手机更智能更实用
【ITBEAR科技资讯】8月5日消息,当地时间8月4日,NothingPhone(2)手机 -
“世界奶业全产业链展会”在呼和浩特市举办
8月4日至7日,作为世界奶业大会重要活动之一的“世界奶业全产业链展会 -
ATP华盛顿赛|商竣程无缘八强 即时排名第154
8月5日凌晨,ATP500级别赛华盛顿公开赛进行男单第三轮比赛。从资格赛突 -
后悔!刻骨铭心的爱情逝去了,但洗掉身上的印记,太疼
潮新闻客户端记者杨茜通讯员徐思鹏年轻时,谁还没做过几件疯狂的事,有 -
连续2场输陪练队!欧文力挺美国男篮:别太当回事 这时有发生
美国男篮世界杯训练营近日正在进行,美国男篮世界杯正赛球队连续2场、 -
中国每个省的简称怎么来的(中国每个省的简称和省会)
今天小鱼来为大家解答以上问题,中国每个省的简称怎么来的,中国每个省 -
“小城特产”,成长有空间(子夜走笔)
“全国每10台冰箱冷柜,就有1台来自民权”,豫东小城产业名片擦得锃... -
传统制造业聚集新优势(经济新方位·县域经济观察)
图为新下线的冷藏车即将驶出民权,发往各地。宁津瑜摄(影像中国)拉开 -
“超老龄”社会来临,台湾何去何从?
按照老龄化社会指标,65岁以上人口占比达到7%就算进入老龄化社会、占比 -
大运会 助推成都体育事业发展(大运聚焦)
市民在成都锦城湖公园绿道骑行。记者沈伯韩摄东安湖体育公园主体育场。 -
现代建筑的实践,穿越时光的魅力(传承之光)
苏州博物馆。记者李博摄北京市百货大楼。巫敬桓绘深圳赛格广场。图为金 -
吉林舒兰强降雨已造成1人遇难,4人失联
截至4日15时,吉林舒兰市平均降雨量达111 7毫米。其中强降雨中心永胜林 -
2023年普通高校招生网上填报志愿(第四段)8月4日至5日进行
山西省招考中心8月4日发布公告表示,山西2023年普通高校招生网上填报志 -
及时反应、及时抢修,河北永清全力保障道路畅通和群众出行安全
近日,受强降雨影响,河北省永清县境内的国省干线、县乡道路出现了不同 -
山西发布地质灾害气象风险预警
山西省自然资源厅和省气象局8月4日17时58分联合发布地质灾害气象风险预 -
河北降水追踪:回波目前覆盖这些地区,局地雨势依然较大
@河北天气消息,降水回波目前覆盖保定、石家庄、衡水以及邢台北部、沧 -
牡丹江牡丹江站今早出现洪峰,超警戒水位2米
记者从黑龙江省水文水资源中心获悉,受近日降雨影响,牡丹江水位快速上 -
7月,全国因灾死亡失踪147人!
应急管理部近日会同工业和信息化部、自然资源部等部门和单位,对2023年 -
中超 | 青岛海牛胜成都蓉城
8月4日,在山东青岛举行的2023赛季中国足球协会超级联赛第20轮比赛中, -
一年半仅出场13次,昔日国足归化国脚惨遭巴甲解约,恐难找新东家
阿兰和弗鲁米嫩塞的合同原本是要截止到2024年7月的,之所以弗鲁米嫩塞 -
暴雨下的京郊民宿业:从一房难求到降价抢客,门头沟房东盼恢复营业
暴雨下的京郊民宿业:从一房难求到降价抢客,门头沟房东盼恢复营业 -
苹果一夜蒸发1万亿!打折、分期、以旧换新…iPhone销售额还是下滑了
苹果一夜蒸发1万亿!打折、分期、以旧换新…iPhone销售额还是下滑了 -
疯狂扫货超百亿!北向资金“去伪存真”后,这个方向被外资买爆了
疯狂扫货超百亿!北向资金“去伪存真”后,这个方向被外资买爆了 -
安中大厦(关于安中大厦简述)
,你们好,今天0471房产来聊聊一篇中大厦,中大厦简述的文章,网友们对 -
研究表明胰岛素样激素对大脑可塑性至关重要
马克斯普朗克佛罗里达神经科学研究所的研究发现了胰岛素样生长因子促进 -
《巨齿鲨2:深渊》伦敦亮相 吴京与杰森・斯坦森联袂出演
图为本片导演本・维特利出席了放映活动。记者许立群摄人民网伦敦8月3日 -
活钱理财成投资新宠 银行竞逐相关赛道
业内人士指出,对机构而言,该类产品在满足客户流动性需求、压降单只产 -
美国信用被降级是对华盛顿发出的三重警告
美国民主、共和两党又“打”起来了!这次是因为国际评级机构惠誉1日... -
美国“被降级”!美媒:美国党派之争陷入恶性循环 严重影响国家治理能力
中国日报网8月4日电美国《国会山报》网站8月2日刊文称,美国政治两极分 -
胡同里的外国艺术家:为北京画一本“纪念册”
柳芭(LiubaDraws)是个热衷于用色彩描述世界、表达内心感受的俄罗斯独 -
韩国接连发生无差别行凶案 政府部门出台措施严打犯罪
中新社首尔8月4日电(记者刘旭)韩国近日接连发生无差别行凶案件,引起警 -
澳大利亚7月新车销量创历史新高 中国产新车销量增长130%
中新社悉尼8月4日电澳媒《澳华财经在线》4日援引澳大利亚联邦汽车工业 -
韩国警方查获一起驻韩美军贩毒案
新华社首尔8月4日电,据韩国MBC电视台报道,韩国警方日前查获一起驻韩 -
今年第三次受到刑事指控,特朗普出庭应诉坚称“无罪”
“无罪”,美国共和党籍前总统唐纳德·特朗普3日在首都华盛顿一家联... -
涿州城区交通供水供电逐步恢复!
在各地各部门大力支援下,涿州市全力做好供水应急保障、抢修受损电力设 -
潮北京|老字号弄潮儿——吴裕泰茶庄
如今的老字号在创新中散发着新活力,你能想到,在百年老店吴裕泰茶庄中 -
华北黄淮等地强降雨持续,南方多地体验“蒸桑拿”
本周末(8月5日至6日),我国的降雨将主要出现在华北、黄淮、华南等地 -
生态谈丨地下水保护需拧紧超采阀门
近日,水利部、自然资源部印发《地下水保护利用管理办法》,旨在进一步 -
美股“渡劫”:超过700亿美元的系统性抛售一触即发?
美股“渡劫”:超过700亿美元的系统性抛售一触即发? -
诺普信08月04日获深股通增持46.53万股
08月04日,诺普信获深股通增持万股,最新持股量为万股,占公司A股总股 -
战洪峰 防洪灾 保安全 保稳定|谁也不愿离开这个家 但是他们义无反顾
受台风“杜苏芮”影响,连续极端强降雨导致太行山、燕山发生特大洪... -
教育部:严查高校毕业生就业数据造假 已开通监督举报电话和邮箱
记者8月4日从教育部获悉,教育部高度重视高校毕业生就业数据监测工作, -
河北继续发布暴雨蓝色预警,部分地区地质灾害橙色预警
河北省气象台2023年08月05日05时发布天气预报继续发布暴雨蓝色预警信号 -
暴雨亲历者:我被困在K1178上的72小时
近日,京津冀地区持续强降雨,导致北京丰台至沙城铁路(丰沙线)遭遇严 -
转扩!洪水淹过的饮料不要喝!
近日,由于台风和暴雨的影响,多个地方出现洪水。饮用水、饮料等可能会 -
河北发布暴雨蓝色预警信号、大风及雷电黄色预警信号
中央气象台网站消息,河北发布暴雨蓝色预警信号、大风黄色预警信号及雷 -
河北涿州主城区积水基本退去,生活秩序逐步恢复
记者昨天(4日)从应急管理部获悉,针对河北省部分地区遭遇严重洪涝灾 -
海康威视子公司IPO再遭“灵魂拷问”:现金流较差,上半年失速仅增8%
海康威视子公司IPO再遭“灵魂拷问”:现金流较差,上半年失速仅增8% -
美国前财长萨默斯:美国经济软着陆的概率增加了,但通胀可能再次抬头
美国前财长萨默斯:美国经济软着陆的概率增加了,但通胀可能再次抬头 -
两大因素推动投资者抛售美债,风险资产面临更多“逆风”
两大因素推动投资者抛售美债,风险资产面临更多“逆风” -
7月CPI要破0?
7月CPI要破0? -
富国银行客户存款突然消失 发生了什么?
富国银行客户存款突然消失发生了什么? -
原谅 张玉华 简谱 原谅张玉华mp3百度云
0471房产来为大家解答以上的问题。原谅张玉华简谱,原谅张玉华mp3百度 -
教你学会有哲理的名人名言100句
01萧伯纳作者简介萧伯纳,爱尔兰剧作家。1925年因作品具有理想主义和人 -
阿根廷将使用卡塔尔提供的贷款向国际货币基金组织偿还到期外债利息
当地时间8月4日,阿根廷经济部发布消息称,该国将使用卡塔尔提供的贷款 -
土耳其总统称希望俄总统在8月访问土耳其
当地时间8月4日,土耳其总统埃尔多安在伊斯坦布尔会见媒体时表示,关于 -
乌克兰称采取措施加强对港口基础设施保护
乌克兰媒体当地时间8月4日报道称,乌克兰南方战区司令部发言人当天表示 -
黑龙江省启动自然灾害救助Ⅲ级响应
8月2日以来,黑龙江省哈尔滨、牡丹江、伊春、齐齐哈尔4个市(地)的21 -
卢布对美元汇率突破96比1 对欧元汇率突破106比1
当地时间8月4日,莫斯科交易所开盘后,卢布对美元汇率自2022年3月28日 -
北京今天最高气温34℃,傍晚到夜间有雷阵雨,天气闷热
北京市气象台5日6时发布:今天白天多云转阴,傍晚有分散性雷阵雨,北转 -
巴西批准罗赖马州从委内瑞拉进口电力
当地时间8月4日,巴西总统卢拉签署了一份政令,允许该国西北部毗邻委内 -
广西启动防汛四级应急响应
据气象预报,受低压环流影响,8月4至8日北部湾海面、桂南桂西部分地区 -
北京市文旅局:全力确保暑期旅行社旅游团队安全
关于全力确保暑期旅行社旅游团队安全的通知各旅行社:当前全市部分山区 -
湖北宜都市创新线上融资平台—— 提高企业信用含金量
近日,记者在湖北省宜都市三江科技创业园项目建设工地看到,工程车往来 -
播放量破6亿,甜宠又虐心,芒果台又悄悄甩出了硬核王炸剧
今年暑期档的古装剧竞争激烈,但从内容形式来看,大流量主演的大IP都 -
美股指数集体收跌:苹果市值跌破3万亿美元,每日优鲜大涨逾284%
美股指数集体收跌:苹果市值跌破3万亿美元,每日优鲜大涨逾284% -
7月全国自然灾害1601.8万人次受灾,因灾死亡失踪147人
应急管理部近日会同工业和信息化部、自然资源部等部门和单位,对2023年 -
外观硬朗 奇瑞轻越野SUV探索06将于8月20日上市
外观硬朗奇瑞轻越野SUV探索06将于8月20日上市,奇瑞汽车,越野,新车,suv,车尾