为什么go的框架都没有统一入口文件,还有提供api服务时生产环境需要nginx吗

kaxikaxi · 2017-12-27 03:02:47 · 2033 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-27 03:02:47 的主题,其中的信息可能已经有所发展或是发生改变。

最近初学go有点疑惑。

1、为什么go的框架都没有统一入口文件 看了go的流行框架比如,beego ,gin 等等发现好像都没有index.go这样的概念。一般在实际项目中是需要统一处理一些逻辑的,比如session、拦截器、路由等等,好像go的框架都没有

2、提供api服务时生产环境需要nginx吗 go提供服务端接口的时候生产环境应该是怎样的,是直接用http模块服务还是需要比如nginx这样做代理呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2033 次点击  
加入收藏 微博
10 回复  |  直到 2017-12-28 11:35:11
dong-hao
dong-hao · #1 · 7年之前

你可以使用 martini 这个框架来做,像你说的,依赖注入的方式来处理一些共同逻辑。 生产环境可以不用 Nginx 代理

momaek
momaek · #2 · 7年之前

1 理论上来讲,session,拦截器,路由都是有的,这些东西你可以看文档,文档里面应该是都有写了要怎么使用的。 golang 的框架应该是不需要统一的入口的,因为golang的程序不是依赖框架来启动的,而是依赖你自己写的 main 函数来启动作为程序的入口(这点可以参考 C 语言)。

2 简单来说 golang 做服务的时候可以不需要nginx,直接用 http 的模块就行。 也就是说直接编译一个二进制文件放到服务器上就可以提供服务了。如果你想要 https ,golang 也有 tls 的模块可以使用。

kaxikaxi
kaxikaxi · #3 · 7年之前

@momaek 恩 我再仔细看看他们的文档。go做服务可以不需要nginx,但是是不是在实际生产环境中一般都是用上的?或者可以说一下您公司go服务的大概架构是怎样的吗?感激

momaek
momaek · #4 · 7年之前

@kaxikaxi 我一般会在前面挡一层 nginx

haha_cat
haha_cat · #5 · 7年之前

又不是脚本语言 要个什么入口文件

JJJJJJJerk
JJJJJJJerk · #6 · 7年之前

main.go(package main) main函数就是入口啊. objective-C里面也是main 函数是入口啊

kaxikaxi
kaxikaxi · #7 · 7年之前

@JJJJJJJerk 如果对外提供接口服务,假如10个(或者更多)接口,那么这10个是放在一个文件的main中,还是分别10个文件的main中,这10个接口根据需要可能要做一些统一的操作,如果分别在10个文件中应该怎么统一处理呢?

kaxikaxi
kaxikaxi · #8 · 7年之前

@haha_cat 如果对外提供接口服务,假如10个(或者更多)接口,那么这10个是放在一个文件的main中,还是分别10个文件的main中,这10个接口根据需要可能要做一些统一的操作,如果分别在10个文件中应该怎么统一处理呢?

JJJJJJJerk
JJJJJJJerk · #9 · 7年之前
kaxikaxikaxikaxi #7 回复

@JJJJJJJerk 如果对外提供接口服务,假如10个(或者更多)接口,那么这10个是放在一个文件的main中,还是分别10个文件的main中,这10个接口根据需要可能要做一些统一的操作,如果分别在10个文件中应该怎么统一处理呢?

main函数只在编译好的二进制程序启动时候运行一次 不退出.通过无限循环来监听tcp发送到golang程序端口的网络数据 golang httpmux(路由)根据相应的请求 执行相应的httphandle 返回相应的response。你可以看Github上那个golang web 开发教程 手机上不好贴出地址

snailshen2014
snailshen2014 · #10 · 7年之前

不需要容器,框架。类似c语言的http server。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传