首页 > 其他分享 >golang的一些体会

golang的一些体会

时间:2024-07-15 11:52:15浏览次数:9  
标签:体会 封装 变量 zk 接口 golang go 类型 一些

 

1. 接口变量肯定对应一种具体类型,参考java的接口与实现。

2. 如果使用接口类型变量存储对象,那内存里会存两份内容:实际类型、接口类型(含接口中的函数指针列表)。

    - 其实这里的函数指针列表类似于C++的虚函数表。

    - 因为go的鸭子类型,所以接口变量必须记录接口中函数在对象的实现,否则无法找到,或者查询太慢。

3. gin 开发web项目超级简单,前提是懂HTTP协议。 一个有意思的是支持一个进程占用多个端口,这个是之前没有想过的。

4. grpc + protobuf + interceptor + lb 已经具备了微服务的一些基本功能。

5. etcd v3 已经与 v2完全不一样了,v2还是zk、redis的思路,v3则把租约单独抽取出来,并取消了目录格式(虽然表现上还是支持),还有watch不像zk那么弱(zk的通知不含数据,需要主动查询,期间可以漏掉中间的变动,或者存在不一致的情况)。

6. go-zero 开发微服务的确方便,提供命令和goland插件,基于pb一键生成代码,清晰易懂。插件丰富。嗯嗯,目前还没搞定既发布服务也订阅服务的情况,有时间研究下。

7. dubbo-go 也不错,提供了专门的命令。

8. 在某些方面上,go非常接近C和linux,如 os.Signal、exec等。

9. go的error是接口,对象可以是直接错误类型( errors.New("直接错误") ),也可以是封装错误类型( fmt.Errorf("我是封装的!%w", err) ),后者其实是一棵树。

    - 因为存在封装,所以有时候error不能直接使用 == 来判断,需要使用 errros.Is 来判断。

    - 因为存在封装,所以可以使用 errors.As 来提取指定类型的错误。

10. 直接提供了操作切片的slices工具包,这个是新增的吧? 非常有用!比如压缩Compact、清理冗余空间Clip、判等Equal、追加Concat、逆向Reverse、插入Insert、排序Sort、二分查找等。

11. reflect分为两块,Type和Value。

    - Type可以获取更底层的Kind(),比如别名时  type IA int32; type IB int32;,它们的Type肯定不一样,但Kind一样。

    - Value又分为可操作和不可操作的(指针类型可操作,其他类型因为是值传递导致无法修改原值),可操作的需要Elem才能操作。另外,还提供了CanXxx用于判断是否支持设置相应类型的数值。

12. 新版本 for 的变量每次都是新分配的空间,所以现在不会出现因为循环变量导致的闭包问题了。(为了兼容老版本,建议还是写 fun(x){}(x) 这种)

13. struct可以直接==比较 -- 无论是直接创建的还是new出来的(当然new的需要解引用一下,否则就成了指针判等)

14. go协程其实无所谓父子协程,所以也不存在捕获子协程的异常一说。不像父子进程、线程。

15. 因为14,所以只能在当前协程里捕获异常。

 

标签:体会,封装,变量,zk,接口,golang,go,类型,一些
From: https://www.cnblogs.com/larryzeal/p/18302901

相关文章

  • Golang - 使用责任链模式代替IF ELSE
    一、传统IF判断1、在业务中使用大量的if判断代码如下:packagemaintypeSellInfostruct{Pricefloat64OrderCountintTotalCountintMemberShipint}funcmain2(){vara=SellInfo{Price:1.0,OrderCount:......
  • 工作中遇到的一些技术
    dynamic-tp动态线程池动态线程池,可以通过nacos配置动态修改线程池参数,官网以下是dynamic-tp与nacos集成的步骤,更详细配置项可以查看官网引入依赖坐标<dependency><groupId>org.dromara.dynamictp</groupId><artifactId>dynamic-tp-spring-cloud-starter-nacos</ar......
  • 一些额外功能的铺垫
    publicclassHealth:MonoBehaviour{  publicAnimator[]healthItem;  publicAnimatorgeo;  //Startiscalledbeforethefirstframeupdate  voidStart()  { 。  }  //Updateiscalledonceperframe  publicvoid......
  • 一些可以在线段树上维护的信息和修改
    信息最基础的信息之一:区间和\(sum=l.sum+r.sum\)最基础的信息之一:区间大小\(sz=l.sz+r.sz\)最基础的信息之一:区间最值\(minv=min(l.minv,r.minv)\)普通信息:最值个数if(l.minv<r.minv)minvcnt=l.minvcnt;elseif(r.minv<l.minv)minvcnt=r.minvcnt;......
  • 心得体会
    张传波老师的教学内容涵盖了Scrum的多个方面,‌包括但不限于神马是敏捷?SCRUM是神马?SCRUM的团队架构SCRUM的最佳实践UserStory(用户故事)Sprint(冲刺)BurnDownChart(燃尽图)其他:结对编程、持续集成、测试驱动、测试自动化每日会议、LessonsLearned。‌这些体现了他......
  • golang channel 的众多应用场景123
    目录1.应用场景2.应用场景示例2.1并发控制2.2管道|范围迭代|数据传输2.3数据传递->生产者-消费者模型2.4互斥同步2.5信号通知2.6定时器我们知道go中有个很重要的数据结构叫做channel-通道,通过其特性,我们可以完成很多功能,自然就对应到很多应用场景了。1.应用场景......
  • 定制私模耳塞常用的泰达克TADHE专用UV树脂。这种UV树脂要求比较高,长时间佩戴在耳朵上,
    定制私模耳塞常用的专用UV树脂私模定制耳塞专用UV树脂通常用于制作个性化的、与耳朵形状相符的耳机内芯。这种UV树脂要求比较高,长时间佩戴在耳朵上,需要确保合适的形状和舒适度。那么定制私模耳塞就要注意以下一些方面:1.     耳模制作:制作私模耳机的第一步,就是首先要......
  • 关于最近看到的一些前沿技术
    看了一下新技术,感觉自己所了解的技术真的太窄了。什么新技术呢? WebAssembly官网https://webassembly.org https://developer.mozilla.org/zh-CN/docs/WebAssemblyWebAssembly是一种新的编码方式,可以在现代的Web浏览器中运行——它是一种低级的类汇编语言,具有紧凑的......
  • 学习了张传波老师的Scrum(敏捷方法论中的核心框架)后的心得体会
    1.Scrum的核心价值与实践在学习Scrum过程中,首先会深刻体会到Scrum所强调的核心价值:快速迭代、持续交付、客户为中心以及团队自组织。这些价值不仅改变了传统的软件开发流程,更推动了团队文化的转变,使团队能够更灵活地应对变化,更快地交付有价值的产品。2.角色转变与团队协作在Scr......
  • python中一些特殊方法及含义
    python中一些特殊方法及含义,后期会根据系统学习后修正补充归纳汇总初始化和销毁:__init__(self[,args...])对象初始化,构造函数,在生成对象时调用,简单的调用方法:obj=className(args)初始化方法,在创建对象时进行初始化操作__del__(self)......