怎样才算熟悉GO?

经过参加一些面试之后,个人的一些理解。其实这些知识点都懂,但是很少有机会描述,所以面试的时候一问就描述不清楚了,所以写一篇博客组织下自己的语言,能够清楚表述。也是惭愧,这些很基础的东西,我竟然没有经常复习。

---更新 2019年07月04日

GO关键字有哪些?(至少应该是要倒背如流吧)
GO内置函数有哪些?(至少应该是要倒背入流吧)
能清楚的描述每个关键字和内置函数的作用以及一些场景?
defer?
new和make的区别?
panic和error的区别?
无缓冲和有缓冲的区别?
unsafe.Pointer和uintptr的区别?
GO应用反射场景?
CGO编程?

GO关键字?
GO的关键字一共25个,但是就25个就足够完成现在编程的一切所需,当你分析每个关键字结合当下的编程所需的时候,就会发现GO的设计就是一件艺术品,不多不少。
包管理:package、import
变量:var、interface、struct、map、type
常量:const
函数:func、return、defer
循环:for、continue、break、range、if、else、switch、case、default、fallthrough、goto
并发:go、chan、select
对于包管理的话,有package、import,对于变量的话有var、interface、struct、map,类型定义有type。常量的话有const。函数的话有func、return、defer。循环的话,go中的for具有c语言中for+break的所有功能,用一个for完成循环,更加简洁,if、else、switch、case、default、fallthrough来完成选择。

GO内置函数?
new、make、append、copy、delete、close、len、cap、panic、recover

可以将内置函数进行分类,可以得出以下几个分类:
1)新建:new、make
2)添加:append
3)复制:copy
4)删除:delete
5)关闭:close
6)计算长度:len、cap
7)异常处理:panic、recover

从上面三个分类中,出现了有2个内置函数,说明要区分这两个函数的不同。
(1)new和make的区别?
第一个区别:针对对象不同,new的传入是可以任意类型的,make的传入类型只能是slice、map、chan
第二个区别:返回对象不同,new返回的是一个指针,make返回的是引用
第三个区别:操作不同,对于slice、map、chan来说,new只为对象分配内存,make是为对象分配内存和初始化操作
(2)len和cap的区别?
第一个区别:传入对象不同,len可以是string、slice、map、chan,但是cap只能是slice
第二个区别:功能不同,len是计算已用长度,cap是计算对象分配的容量
(3)panic和error的场景?
panic是用来处理异常情况,error是用来处理错误情况,什么是异常?什么是错误?异常就是你知道会出现错误,但是你不知道是什么错。错误就是你知道会发生什么错,这是这两者之间的区别。

无缓冲和有缓冲的区别?
无缓冲的话,向这个channel写入之后,如果再向这个写满的channel写入数据的话,会被一直阻塞,直到有一个协程去读取channel。
有缓冲的话,只有向channel写满的情况下写入才会造成阻塞的情况
无缓冲:
c := make(chan int, 0)等价
c := make(chan int)
有缓冲:
c := make(chan int, n) // n > 0
说明:无缓冲make(chan int)和有缓冲make(chan int, 1)的区别
向make(chan int)放入一个值的时候,就会被阻塞,直到其他地方有从这个无缓冲中读取内容为止。而向make(chan int, 1)里面放入一个值的时候,不会立即阻塞,直到后面这边满为止,再向里面放一个值时才会阻塞。

defer功能和使用场合?
defer用于退出执行,比如打开文件之后,需要关闭,以及打开数据库之类的操作,主要是应对在操作过程中遇到某些情况,如需要返回错误或发生panic的时候,关闭操作依然能被执行,关于defer的效率问题,可以看我的另一篇博客:,defer对程序的效率影响可以忽略不计。

unsafe.Pointer和uintptr的区别?
go指针详情可以参考我的博客文章:https://www.jianshu.com/writer#/notebooks/28359403/notes/33744906
区别一:功能不同,unsafe.Pointer不能进行指针运算,用于充当普通指针和uintptr的转换桥梁,uintptr可以进行指针运算
区别二:实质不同,GC将unsafe.Pointer看成一个指针引用,uintptr不被GC当成指针,也就是当一个地址被uintptr指向外,没有被其他所指向,则会被GC回收。

GO应用反射场景?
有两种情况:
1)不知道接口调用哪个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。例如:桥接模式。
2)不知道传入函数的参数类型,函数需要在运行时处理时任意参数对象,这种需要对结构体对象反射。例如ORM。
from大佬:https://yq.aliyun.com/articles/599584

关键字:
1)package 进行包命名
2)import 引入包
3)var 用于声明变量
4)interface:两个功能,第一个功能被用于无类型变量,能够接收不同类型的变量,第二个功能是用于定于接口
5)struct 用于定义结构体(类)
6)const 定义常量
7)map 映射

内置函数:

iota 类似枚举,开始的时候为0,然后递增,如果遇到const的话,则重新开始

将自己的知识分享出来之后,有得有失,失去的是自己的优势没了,但是从长远的眼光看的话,这种优势反而不利于自己的成长。得到的是,心理就被迫要学习新的知识,被迫的去深入理解更加复杂的知识,让自己不断突破了自我。

当我总结完,发现我当时面试的时候说的都是些什么啊。。。
加油:现在离精通和深入理解又更进了一步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 转载自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay阅读 6,060评论 1 5
  • 1.安装 https://studygolang.com/dl 2.使用vscode编辑器安装go插件 3.go语...
    go含羞草阅读 1,497评论 0 6
  • Go入门 Go介绍 部落图鉴之Go:爹好还这么努力? 环境配置 安装 下载源码编译安装 下载相应平台的安装包安装 ...
    齐天大圣李圣杰阅读 4,533评论 0 26
  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,312评论 1 47
  • 你要做一个披荆斩棘无所不能的女英雄, 直到遇见能托付一生的人, 再做一个瓶盖都拧不开的小公主。 一个姑娘最酷的时候...
    姓善名恶阅读 407评论 5 5