Go语言项目推荐4

给大家推荐一个好玩的go项目:Nunu。项目地址:https://github.com/go-nunu/nunu

Nunu是一个基于Golang的应用脚手架工具,可以帮助开发者快速搭建一套go项目的应用程序模板。nunu生成的项目模板集成了go项目常用的框架和组件,如gin,gorm,go-redis,wire,viper,swag等等。

当然了,项目模板可以有很多,不一定非得拘泥于nunu提供的这一套,但在这里我想重点介绍一下nunu命令本身以及使用nunu命令生成的项目布局的亮点。

首先是nunu命令,我最开始接触nunu的时候,源码还只有500多行,现在差不多有1000行左右,但大家不要畏惧看源码和复现nunu源码。nunu源码中最核心最亮眼的地方,就在于对cobra库的使用。cobra库是Golang里一个用于创建强大的现代CLI应用程序的第三方库,许多很知名的开源项目使用到了cobra,比如docker,k8s。大家如果接触过go微服务,应该对go-zero和kratos框架不陌生。这两个框架的命令生成工具goctl和kratos,也都是基于cobra开发的。大家如果可以掌握cobra,将来也可以开发属于自己的命令行工具,而在面试时,别人的简历项目都是各种秒杀商城及其变体(真正的秒杀商城绝对不是一个人可以搞定的),而你的项目是一个命令行工具,是不是显得别具一格。

其次是wire工具。nunu生成的项目架构,和微服务框架kratos一样,使用了wire实现了模块化和解耦。wire是 Google 开源的一个依赖注入工具,它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告诉wire类型之间的依赖关系,它会自动帮我们生成代码,帮助我们创建指定类型的对象,并组装它的依赖,实现Javaer耳熟能详的控制反转。当然,这不是必须的,许多大型go项目不使用这种方式,依然可以很好地组织项目布局和结构。但直到今天,业界也没有一个统一的go项目布局的标准,所以尽可能多了解一些go项目组织布局的方式,还是很有必要的。等大家以后进到企业参与实际开发,你们企业大概率也会有自己的项目结构布局。

希望这个项目可以对大家有所帮助,大家以后在学习go项目开发时,如果不想使用视频教程里的组织布局,就可以使用nunu框架提供的模板,如果习惯了nunu提供的项目布局模板,大家将来也更容易适应kratos框架提供的项目布局。
全部评论
感谢楼主分享! 看了一下楼主之前的关于go学习路线的规划,感觉非常棒,有几个小问题想要请教一下:我现在是大三,如果想要在明年三四月份找到一份golang的暑假实习的话,是使用gin,go-zero之类的框架去做一个项目呢,还是去手写一个框架之类的,比如极客兔兔系列?
1 回复 分享
发布于 2023-12-10 23:47 江苏
收藏了,以后再看
1 回复 分享
发布于 2023-12-05 15:54 湖北
28届刚敲完bluebell,再搞个这个项目暑假找个中厂实习如何
点赞 回复 分享
发布于 03-24 17:59 山东

相关推荐

2025.4.2 下午三点开始面试,时长大约55分钟。2025.4.3 下午四点多一面挂的邮件就已经发来。本人是个菜鸡,正在为找暑期实习而努力。记录一下自己的第二场面试,也是第一个大厂面试。前面直接给我问懵了,中间有一会感觉大脑缺氧,晕晕的。面试官总体来说还行,但是我回答完问题就只是嗯,也不多说。1.自我介绍#牛客AI配图神器#2.首先问了项目是练习项目吗?回答:是学习练手项目;又问:从头开始做的吗?回答:从头开始做的。3.项目为什么选择微服务,是怎么拆分的回答:(这块没准备)只说了微服务后期好扩展,且不同微服务之间解耦。(这时候脑子已经乱了)具体如何拆分微服务的,我回答的是微服务分为对外接口层api、应用层、领域业务层、基础设施层、调用别的微服务接口的rpc层。这真是给后面埋了大雷。4.项目开发过程中的难点和亮点巴拉巴拉乱说一通,但是没忘记说项目的亮点,说了好几个项目的亮点,可能面试官不兴趣,后面就问了我说的在项目中用到了一些设计模式的亮点....5.如何和其他服务交互回答了api层封装接口、rpc层调用其他服务6.RPC基于什么实现回答:rpc是微服务中的其中一层,如果要调用其他服务的,经过 nacos 注册中心借助 Feign 可以实现调用别的微服务中的接口。。7.追问了 Feign 如何实现的回答:把项目中一个微服务调用另一个微服务的实现说了下追问:底层如何实现的回答:网络协议和数据序列化(没看过这个,随便说了俩)8.feign的协议和序列化是用的什么?直接抱歉,不会9.项目部署了吗?回答:在自己实验室电脑上的linux环境接著jenkins自动部署,只能内网访问。把jenkins部署流程简单说了一下10.你提到项目中用到了设计模式,具体如何实现的?把项目中用到的的工厂-策略模式、适配器模式都说了项目阶段回答的太烂了,就开始问八股了。11.java的哈希结构有哪些?回答:hashmap、concurrentHashMap、linkedhashmap、hashtable(直说了这些,其他的回答不上来了)12.hashmap的底层,红黑树查询和插入效率回答:基于数组、链表/红黑树实现,还说了链表转红黑树的时机;面试完回想当时好像说的是O(n),脑子想的是O(logn),说成了O(n)13.hashmap和hashtable的区别回答:hashmap不是线程安全的、hashtable是线程安全的14.hashtable线程安全怎么实现回答:使用synchronized实现15.ConcurrentHashMap实现线程安全?回答:回答了 jdk1.7和1.8分别怎么实现的16.乐观锁与悲观锁,分别的应用场景回答:乐观锁和悲观锁回答出来了,但是应用场景说反了17.synchronized和lock区别回答:说了synchronized基于jvm的监视器锁机制,巴拉巴拉;而reentrantlock使用lock显示的获取锁。18.lock和unlock底层怎么实现回答:只记得判断state的状态来获取和释放锁,具体如何不知道19.JVM的GC算法回答:最开始回答了垃圾回收器,过一会才反应过来,20.什么情况下触发GC回答:说主要是因为内存不足,然后System.gc()方法,其他的不记得了21.讲讲spring的IOC回答:控制反转,把bean交给spring管理,解耦,方便维护和测试。依赖DI实现22.依赖注入怎么实现回答:静态、实力工厂、构造器、setter方法。(注解注入忘记了,没有说)23.Spring事务注解@Transaction的底层实现回答:只说了使用AOP和事务拦截器,替代传统的编程式事务(其他的不知道了,直接抱歉)24.mysql的默认隔离级别回答:read-committed,读已提交25.read-committed是什么意思回答:回答成了一个线程只能读取其他线程已提交的数据(哎,事务说成线程了)26.其他的隔离级别以及解决了什么问题回答:回答了其他的几个隔离级别对应解决的问题27.如何实现可重复读回答:这个忘记了,随便说了一个MVCC28.MVCC如何实现回答:版本号,读取数据快照29.算法(没成功运行):单链表奇数节点递增偶数节点递减,重排后使之升序,回答一下思路。在纸上画了一下,过一会有了思路:把原链表拆分成两条链表,奇数节点链表和偶数节点链表,然后反转偶数节点链表,这时候就是合并两条有序链表。面试官让我实现一下代码写完之后,在合并代码那报空指针异常,检查了一下这个合并方法,问题不出在这,估计是前面的拆分链表的时候写错了。但是没检查出来哪里写错了。面试官说时间快到了,让我下去再看看。反问:通过这场面试,您觉得我应该往哪方面改进?面试官反问,你觉得你前面的问题哪些没答好我说了一些前面没回答好的问题面试官说要了解框架、和一些技术的底层原理,不能只会用#面经java#
点赞 评论 收藏
分享
评论
13
69
分享

创作者周榜

更多
牛客网
牛客企业服务