Golang 语言入门(二)

创作人 Leo


编辑时间 Mon Aug 15,2022 at 15:47


golang web 服务搭建

go 语言 web 程序框架

go语言严格来说不属于面向对象语言,但是它也有面向对象的一些特性

  1. go语言提倡约定大于约束,go语言实现接口不需要像 java 等面向对象语言使用 implements 显示声明,而是通过实现了 interface 的全部接口函数来实现
  2. go语言的复用不是通过继承复写,而是通过组合其他 struct 实现
  3. go语言成员以及方法权限限定不是通过 private public protected 关键字声明,而是通过首字母大小写来限制,大写为导出函数,即可以在包外部使用
  4. go语言new关键字不是调用某个构造函数方法,而是在内存中申请一块声明结构体大小的内存,并对其进行清零操作(初始化内存块),该内存地址全部比特位被置为0

go语言不需要使用什么程序框架,在项目中各个功能模块都是按照包区分,一般来说我们需要哪些功能,可以直接引入对应的包
比如以下为一个go语言程序目录

build/
commands/
conf/
controllers/
core/
crond/
docs/
go.mod
go.sum
main.go
Makefile
middlewares/
models/
README.md
resource/
router/
sdk/
storage/
taskpool/
templates/
test/
tools/

推荐使用 go mod 来管理包,目录中 go.mod 为包管理文件,里面记载了该项目使用的第三方包以及版本号
main.go 为主程序文件 main 函数所在文件,main 函数一般会在里面做初始化操作,比如配置文件,数据库连接等
Makefile 是工程的编译文件,将编译命令写入到该文件,可以方便通过 make 工具执行
conf 目录是配置目录,一般我们会将配置初始化,配置数据句柄,工程全局常量保存在这个目录
commands 是命令目录,我一般会使用 cli 包对工程命令进行管理,这里会将命令划分多个文件,每个文件为一个子命令集合,通过commands.go 对所有命令集再进行配置,最后再main函数中引入并进行初始化
crond 是一些轮询任务,建议通过统一的接口进行管理,并做成可配置的
docs 是项目的文档,sql 和 api 尽量都在这里做一个备份
middlewares 项目使用了 gin 包开发 http 服务,middlewares 是web程序用到的中间件,比如登录验证
models 是项目的数据模型,里面包含了全部数据表映射的结构体,以及各种增删改查,事务处理;子目录 data 为其他数据模型,比如请求第三方接口的 request response 数据映射
resource 是项目的资源数据,比如图片,json 数据等
router 里面写的是 http 的路由
sdk 中有许多子目录,每个子目录都是一个单独的外接功能,比如云储存接入
storage 是项目的临时存储目录,日志可以放在这里,但是生产环境一般不建议放在这里
taskpool 提供了一个 channel 池,用来对异步任务进行统一的管理
templates 是项目的 html 模板目录
test 是单元测试目录
tools 里面也是划分子目录,里面是独立的功能,比如加密,curl

搭建一个 web 服务器程序(第二周)

大纲

  1. map 集合 map
  2. 练习切片和范围 slice range
  3. 理解 Go 并发 go 并发
  4. gin 框架学习 gin github

简单 web 应用程序框架

github 地址

该框架是一个精简版的对于上述程序结构的实现
主要使用 gorm 作为数据库操作,gin 作为web程序管理
接口程序在 controllers 包中实现,不同的业务逻辑通过不同 controller 进行管理,每个 controller 需要组合 base controller 从而复用 base 逻辑
数据模型在 models 中编写,每个 model 对应一个数据表
配置文件使用简单的 json 格式,通过参数传给主程序

任务

  1. 通读该框架,了解框架结构以及GO语言编程思路
  2. 使用该框架设计一套接口,如果没有思路就写一套注册登录
  3. 能够自己搭建一个 go 语言应用程序框架(可选)

阅读:884
搜索
  • Linux 高性能网络编程库 Libevent 简介和示例 2578
  • web rtc 学习笔记(一) 2354
  • Mac系统编译PHP7【20190929更新】 2304
  • react 学习笔记(一) 2245
  • zksync 和 layer2 2237
  • Hadoop 高可用集群搭建 (Hadoop HA) 2182
  • Hadoop Map Reduce 案例:好友推荐 2151
  • 小白鼠问题 2085
  • Linux 常用命令 2082
  • 安徽黄山游 2058
简介
不定期分享软件开发经验,生活经验