## 起因
之前在知识星球里星主让用`SMTP`协议实现邮件发送功能,看了`Max Li`的设计,并和他交流了一小时,在此将设计经验记录下来。
## 设计过程
设计一个项目的结构,有时候就像写文章一样,得分清层级。下面我将把讨论出的设计经验记录下来。
- main.go文件,当做项目的入口,里面可以写明版本号,读取配置文件,以及日志的初始化;
- gomod文件,包管理
- makefile文件,如果启动程序较多,可以写入makefile文件中,到时运行直接make即可;
- pkg文件夹,存放项目的主要源代码
- cmd文件夹,存放项目生成的可执行文件
- config文件夹,存放配置文件,包含项目的基本配置信息
- vendor文件夹,将依赖的包放入此目录中
- util文件夹,项目中所写的小工具,例如进制转换,查错,类型转换,时间转时间戳等放入该文件件
## 存在的问题
#### 1,设计中难免会出现明文密码显示等相关信息,如何做到保密呢?
#### 2,如何做到在项目build同时自己更新tag号?
参考[govvv](https://github.com/ahmetb/govvv)
#### 3,怎样设计出一个框架,支持易扩展可维护呢?
我能想到的是,`web`服务设计接口,在接口中添加操作。
## 参考文章
[Server Project Layout](http://idiomaticgo.com/post/best-practice/server-project-layout/)
## 写在最后
写`demo`的时候,还是忍不住将所有的程序写进一个`main`函数里,又或者是新建一个`server.go`文件,然后一股脑的在里面做文章。
今天早上看星球里的朋友提出了一个问题,我觉得很对,在此摘录如下
> 提高编程技能是很不容易的,一个人一旦习惯了某种编程思维就很难再突破。就说说我自己,一个业务用一般方法能实现的,我很难再去想到用接口,函数类型,闭包,反射等。虽然业务实现了,但总感觉代码写的很烂,自己看了都恶心。我相信大家一定有同感,教程和视频看了很多,也知道很多概念,但等到自己用的时候,又回到了旧的思维习惯。我觉得老大在布道go时,更应关注这方面的培养,知识的细节和技巧可以慢慢积累,但思维定势不突破,永远也不可能提高。
今天和`Max Li`的沟通,还有在做项目时不断的以工程思维冲击着以前遗留下来的旧的思维习惯,我只想说,越早做出好的改变,成长的空间的也就越大。
共勉!
[原文地址](https://niannian.cleer.club/category/Go%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E8%AE%BE%E8%AE%A1%E8%BF%87%E7%A8%8B%E7%82%B9%E6%BB%B4%E8%AE%B0%E5%BD%95/)
有疑问加站长微信联系(非本文作者))