每次学习并整理一个Golang的知识点,每天进步一点点。今天来学习下结构体的一个知识点🤔。
代码片段
观察如下代码片段,判断能否编译通过;如果可以,写出输出结果?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package main
import (
"fmt"
)
type s struct {
name string
age int
}
type m struct {
age int
dict map[string]string
}
func main() {
s1 := s{"xujpxm", 18}
s2 := s{"xujpxm", 18}
if s1 == s2 {
fmt.Println("s1 == s2")
} else {
fmt.Println("s1, s2 不相等")
}
m1 := m{18, map[string]string{"name": "xujpxm"}}
m2 := m{18, map[string]string{"name": "xujpxm"}}
if m1 == m2 {
fmt.Println("m1 == m2")
} else {
fmt.Println("m1, m2不相等")
}
}
|
思考后看答案
答疑解惑
编译不通过。 输出结果:invalid operation: m1 == m2 (struct containing map[string]string cannot be compared)
上面代码里s1 == s2
是成立的,但m1 == m2
处编译不通过,因为结构体里里map无法进行比较;
这道题目考的是结构体的比较,需要注意几点:
- 结构体只能比较是否相等,但是不能比较大小
- 相同类型的结构体才能够进行比较,结构体是否相同不但与属性类型有关,还与属性顺序相关;例如下面的s3 与 s1 就是不同的结构体;
1
2
3
4
|
s3:= struct {
age int
name string
}{age:18,name:"xujpxm"}
|
- 如果结构体的所有成员都可以比较,则该结构体就可以通过
==
或 !=
进行比较是否相等,比较时逐个项进行比较,如果每一项都相等,则两个结构体才相等,否则不相等;
那什么是可比较的呢,常见的有 bool、数值型、字符、指针、数组等,像slice、map(只能与nil值比较)、function等是不能比较的。 具体可以参考 Go 说明文档。http://docs.studygolang.com/ref/spec#Comparison_operators
其他相关答案,欢迎在评论区留言补充!
下期提问
观察如下代码片段,判断能否编译通过;如果可以,写出输出结果?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package main
import "fmt"
type myInt1 int
type myInt2 = int
func main() {
var num int = 0
var i1 myInt1 = num
var i2 myInt2 = num
fmt.Println(i1, i2)
}
|
答案及解析将在下期文章中给出,欢迎大家在评论区留言,独乐乐不如众乐乐,交流学习,互相进步。
欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”或扫描下方二维码:
文章作者
xujpxm
上次更新
2020-07-01
许可协议
CC BY-NC-ND 4.0 非商业转载请注明出处(作者,原文链接),商业转载请联系作者授权,谢谢!