golang写业务代码,用全局函数还是成员函数

在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复用的代码都会封装为功能函数了。在写业务代码的时候,使用包+全局函数的划分方式,可以将业务代码写成单例,把receive也省略掉了,简单清晰。

使用包+全局函数的方式来划分模块,很多项目在写业务代码的时候,都是这样操作的,但这样会增加目录的层次,看起来会比较啰嗦。

因为使用包划分代码,业务代码使用的变量都成为了包内函数,这样在多个包内文件会互相污染,而多个业务中,可能会用到相同的变量,这样要么通过命名来避免,要么通过将包划分更细进行避免,通过命名来解决,实在太过于啰嗦,不考虑。

拆分后,很可能的代码结构:

src
├── user
│   ├── user.go
├── auth
│───├── auth.go 

这样很明显,拆分出来的目录太多了,几乎每一个业务一个,也是比较啰嗦的,但也还算比较清晰,但还是不够好。

为了使代码更加清晰简洁,我觉得业务代码应该使用成员函数来实现,代码的结构应该是下面这样:

src
├── user.go
├── auth.go

这样层次简单,查看代码的时候也没那么啰嗦,而且也遵从了一种原则:要维护状态的函数,都写成成员函数,反之则可以是全局函数

原文地址:https://www.cnblogs.com/xiaohunshi/p/10357121.html

时间: 2024-10-11 10:00:42

golang写业务代码,用全局函数还是成员函数的相关文章

如何加速golang写业务的开发速度

如何加速golang写业务的开发速度 不要忌讳panic golang写业务代码经常会被吐槽,写业务太慢了,其中最大的吐槽点就是,处理各种error太麻烦了.一个项目中,会有30%或者更多的是在处理error. 对于golang的error这个事情,golang的官方也说的很详细,建议函数返回error,并且让上层调用处理. error和panic实际上就是以前写PHP业务的时候争论的使用errno还是exception的争论.实际上,后续在PHP世界里面,大家都倾向于会使用exception来

天天写业务代码,如何成为技术大牛

前序 在工作之余浏览公司的技术网站,看到了以下这篇文章,细细读来真心觉得不错,写得有价值很实在.于是想联系下作者,问一下是否可以转载.打开钉钉一搜,作者是资深技术专家,差不多就是技术总监级别啊,这也从侧面旁征了,以下的内容是有其亲身经历,切实体会的,而不是鸡汤口号之流.相较与作者的级别,自己确实惭愧汗颜,所以没好直接聊天询问而是在文章底下留言.在得到了作者的同意后将文章的内容贴到这里,作为分享也作为自己的鞭策和提醒.在这里谢谢我的大牛同事了^_^. ....................以下内

天天写业务代码,如何成为技术大牛?

不管是开发.测试.运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而"梦想是美好的,现实却是残酷的",很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说"天天写业务代码还加班,如何才能成为技术大牛",测试说"每天都有执行不完的测试用例",运维说"扛机器接网线敲shell命令,这

CSDN日报20170413 ——《天天写业务代码的那些年,我们是如何成长过来的》

[程序人生]天天写业务代码的那些年,我们是如何成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboot实战:我们的第一款开源软件 作者:纯洁的微笑 在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? [物联网]Android Things:外设I/O接口-I2C 作者:1024工场 内部集成电路(

天天写业务代码的那些年,我们是如何成长过来的

比起写业务代码更不幸的是,主要工作是修 Bug,bug,buG, bUg. 在一家大的公司里,不同的人总会有不同的运气: 运气好的人遇上一个好的项目,升职加薪,从此就走上了人生的巅峰. 运气差的人摊上一个差的项目,升不了职,少加了薪,并且还获得不了技术成长. 我刚毕业那会儿,所在团队的主要工作是,维护一个『又老又旧』的系统.比起写业务代码更不幸的是,我们的主要工作是修 Bug,bug,buG, bUg. 那一年多里,尽管都是维护旧系统和少量的新需求,我们还是在飞速的成长~~.而来源主要是: 组内

编写高质量代码——运算符重载,是成员函数还是友元函数

一.运算符重载的四项基本原则: ▍不可臆造运算符. ▍运算符原有操作数的个数.优先级和结合性不能改变. ▍操作数中至少一个是自定义类型. ▍保持运算符的自然含义. ============================== 二.运算符重载的两种形式: ▍成员函数形式(隐含一个参数 this 指针): 1)双目运算符:参数一个 2)单目运算符:不能显示的声明参数 ▍友元函数形式(不存在隐含的参数 this 指针) 1)双目运算符:两个参数 2)单目运算符:一个参数 ===============

c++语言友元函数和成员函数对运算符重载

#include<iostream> using namespace std; /******************************************/ /*use member function to overload operator*/ /******************************************/ class RMB{ public: RMB(unsigned int d, unsigned int c); RMB operator + (RM

bind()适配器(Adapter) -- 调用全局函数及成员函数

调用全局函数 调用全局函数程序实例: #include <iostream> #include <algorithm> #include <functional> #include <locale> #include <string> using namespace std; using namespace std::placeholders; char my_toupper(char c) { locale loc; return std::u

面向对象,全局函数和成员函数之间的转换

class A{private: int a; int b;public: A(int a, int b) {  this->a = a;  this->b = b; } A Test(A &aa) {  A temp = A(this->a + aa.a, this->b + aa.b);  cout << temp.a << "b:" << temp.b << endl;  return temp; }