点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
给大家推荐一首歌,个人感觉不错,适合边听边码,静静的!
言归正传,昨天的题目比较简单,但答案很丰富,值的一看。
参考答案及解析:编译不通过 invalid operation: sm1 == sm2
这道题目考的是结构体的比较,有几个需要注意的地方:
结构体只能比较是否相等,但是不能比较大小。
相同类型的结构体才能够进行比较,结构体是否相同不但与属性类型有关,还与属性顺序相关,sn3 与 sn1 就是不同的结构体;
1 sn3:= struct {2 name string3 age int4 }{age:11,name:"qq"}
如果 struct 的所有成员都可以比较,则该 struct 就可以通过 == 或 != 进行比较是否相等,比较时逐个项进行比较,如果每一项都相等,则两个结构体才相等,否则不相等;
那什么是可比较的呢,常见的有 bool、数值型、字符、指针、数组等,像切片、map、函数等是不能比较的。 具体可以参考 Go 说明文档。https://golang.org/ref/spec#Comparison_operators
欢迎在留言区补充!
看下今天的题目:
1.通过指针变量 p 访问其成员变量 name,有哪几种方式?
A.p.name
B.(&p).name
C.(*p).name
D.p->name
2.下面这段代码能否通过编译?如果通过,输出什么?
1package main 2 3import "fmt" 4 5type MyInt1 int 6type MyInt2 = int 7 8func main() { 9 var i int =010 var i1 MyInt1 = i 11 var i2 MyInt2 = i12 fmt.Println(i1,i2)13}
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!

给个[在看],是对四哥最大的支持
有疑问加站长微信联系(非本文作者)

1、指针变量p访问属性成员name,可以是隐式解引用(即p.name),可以是显式解引用((*p).name) 2、Go 本质上是一门静态类型语言,尽管语法上可以使用语法糖或不需要显式声明类型,但这些都是 go 编译器在编译时进行类型检查后添加的,并不是在运行时动态判断的。给基本数据类型起了别名,但本质上仍然是基本数据类型,但是,需要使用 显式转换 的方式才能进行直接赋值