gin

全栈工程师需要具备的技能有哪些?

蓝咒 提交于 2020-03-20 16:31:52
3 月,跳不动了?>>> 全栈(Full Stack)工程师,网络上很流行的一个词,无论是前端知识,还是后端架构你都要了解。甚至有些调皮的程序员这样理解全栈工程师:全栈工程师=屌丝战斗机=系统+网络+研发+dba+架构+安全=没女朋友,拿一份工资做三份事情的典型。类似以下的情景工作中经常上演。 老板:小明,我们要做一个xx系统,三个月内上线,这段时间要辛苦一下了! 小明:能招个美工吗? 老板:现在项目预算紧张,我看你不是装了photoshop吗? 小明:能招个前端吗? 老板:现在项目预算紧张,前端不就是html+css+js吗?你可以搞定的! 小明:产品经理呢? 老板:我就是产品经理,有需求问题直接找我就行。 小明:架构怎么弄啊? 老板:架构简单点就行,找个开源的系统参考一下吧 小明默默地擦了擦眼泪,回去加班了 ...... 三个月后,系统上线了,老板拍了拍小明的肩膀,你!就是咱们公司的全栈工程师! 以前,软件工程师最在意的是成为某个领域的专家或者高手,如今,随着软件技术的发展以及需求的变化,尤其是越来越多的程序员出来自己创业,由于各种条件限制,许多技术上的问题不得不亲力亲为地去完成,因此,很多程序员慢慢地就练就了精通多门技术的本领,成会全栈工程师。 那么,全栈工程师需要具备哪些技能? 编程语言 你得先要精通多种编程语言,例如JAVA,Go,PHP,C#,Python,Ruby

轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)

淺唱寂寞╮ 提交于 2020-03-18 18:03:40
3 月,跳不动了?>>> 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考 。 Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考 。 备注: 本文介绍的技巧需要 Fun 版本大于等于 3.6.4。 效果预览 本文涉及到的两个应用示例部署后的链接,点击预览效果: Gin 简单示例: http://gentest.functioncompute.com/ping Beego 简单示例: http://beegotest.functioncompute.com Gin 博客网站示例: http://mdblog.functioncompute.com 环境准备 首先按照 Fun 的 安装文档 里介绍的方法将 Fun 安装到本机。 PS: 本文介绍的方法,不需要安装 Docker,仅仅安装 Fun 即可,最简单的方式就是直接下载可执行的二进制文件

golang 第三方包的使用总结

蹲街弑〆低调 提交于 2020-02-29 05:59:47
golang 第三方包的安装的方法: 1. go get 安装 # 比如要安装 "github.com/gin-gonic/gin" $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时候go get命令并不能安装,所以就需要手动下载源码包,然后拷贝到$GOPATH/sr/ 目录下 # 比如要安装"github.com/golang/protobuf/proto" # 去github.com/golang/protobuf下载源码包, # 拷贝到 $GOPATH/src/github.com/golang/protobuf $ cd $GOPATH/src/github.com/golang/protobuf $ go install 注意:第三包安装完成后,应用程序导入包时还是使用的源码,而非 $GOPATH/pkg/ 下的 .a文件。如何能像标准包fmt一样直接使用pkg,还需进一步研究。 注意:上面直接写的$GOPATH,在 GOPATH 只有一个目录的时候可以这样写,按tab键就会自动切换为实际目录,如果 GOPATH 配置了多个目录则要输入具体的目录。 golang 使用第三方包 使用方式 在应用程序中直接impor即可 // 比如要使用

Golang gin框架学习记录

我是研究僧i 提交于 2020-02-29 05:35:13
参考文档: Golang 微框架 Gin 简介 https://www.jianshu.com/p/a31e4ee25305 一、使用 Govendor Use a vendor tool like Govendor go get govendor(安装) $ go get github.com/kardianos/govendor Create your project folder and cd inside(创建本地项目目录,并切到该目录下) $ mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_" Vendor init your project and add gin (生成vendor文件以及vendor.json,并下载gin) $ govendor init $ govendor fetch github.com/gin-gonic/gin@v1.2 Copy a starting template inside your project (拷贝 https://raw.githubusercontent.com/gin-gonic/gin/master/examples/basic/main.go 文件到本地,实测本地main.go为空,手动从$GOPATH/src/github.com/gin

深入Gin框架内幕(二)

自古美人都是妖i 提交于 2020-02-27 07:54:11
在上一篇文章 深入gin框架内幕(一) 中,主要介绍了Gin框架中是如何创建一个HTTP服务以及内部的核心结构和常用的一些结构体方法,并在最后以一个简单的示例来详细讲解Gin框架内部具体是如何运行的,但是在最后我们会发现使用了一个 Context 引用对象的一些方法来返回具体的HTTP响应数据,在本篇文章中,我们将继续学习和分析Gin框架内幕。 在开始分析之前,我们先简单回顾一下上一个章节中讲到的Gin框架中的几个核心的结构. Gin框架中的几个核心结构 Gin框架中的几个重要的模型: Engine : 用来初始化一个 gin 对象实例,在该对象实例中主要包含了一些框架的基础功能,比如日志,中间件设置,路由控制(组),以及handlercontext等相关方法. 源码文件 Router : 用来定义各种路由规则和条件,并通过HTTP服务将具体的路由注册到一个由context实现的handler中 Context: Context 是框架中非常重要的一点,它允许我们在中间件间共享变量,管理整个流程,验证请求的json以及提供一个json的响应体. 通常情况下我们的业务逻辑处理也是在整个Context引用对象中进行实现的. Bind: 在Context中我们已经可以获取到请求的详细信息,比如HTTP请求头和请求体,但是我们需要根据不同的HTTP协议参数来获取相应的格式化

深入Gin框架内幕(一)

独自空忆成欢 提交于 2020-02-26 00:15:16
Gin框架介绍 Gin 是一个用 Go (Golang) 编写的 web 框架。它是一个类似于 martini 但性能更好的API框架,不同于谢大主导的 Beego web框架,后者更像是Python语言中的 Django 框架,内部包含了开发一个web程序所需的各种组件。 如果你是性能和高效的追求者,我相信你会像我一样爱上Gin。 同时,不同于其他Golang语言的API框架,该框架社区十分活跃,并且主程仍然在不断更新和改进,我们知道通常情况下在选择一个开源的软件或者相关库时,社区的活跃度以及项目的更新情况会非常重要(考虑到后期的维护和性能和特性问题)。 另外一方面,该框架官方提供了很多简单的示例来供我们快速运行一个期望的http服务,这对于一个刚转入Golang进行业务开发的同学来说是一个非常好的开始。 Gin官方提供的各种HTTP服务示例 当然我在很长一段时间也仅是去看官方示例来快速熟悉并实现自己的业务需求,但当有一些特殊的需求时通常去查看官方的具体实现来满足需求,长期如此,不仅耗时且效率极低,因此我产生了将核心源码探究一番的兴趣,希望能通过源码方式来对Gin框架有个深入的学习。 Gin框架中的几个核心结构 我们都知道开发一个HTTP服务,首先需要启动一个TCP监听,然后需要有一些列的handler来处理具体的业务逻辑

Deferred binding failed

谁都会走 提交于 2020-01-21 09:10:22
问题 My application is throwing: java.lang.RuntimeException: Deferred binding failed for 'com.mygwtapp.client.gin.ClientAppGinjector' (did you forget to inherit a required module?) on this code inside the EntryPoint: private final ClientAppGinjector injector = GWT.create(ClientAppGinjector.class); What could be the problem? Here's the full error Log: java.lang.RuntimeException: Deferred binding failed for 'com.mygwtapp.client.gin.ClientAppGinjector' (did you forget to inherit a required module?)

Can I use some kind of assisted Inject with Dagger?

99封情书 提交于 2020-01-19 04:11:05
问题 With Google Guice or Gin I can specify parameter with are not controlled by the dependency injection framework: class SomeEditor { @Inject public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) { } } The assisted parameter stage is specified at the time an instance of SomeEditor is created. The instance of SomeClassA is taken from the object graph and the instance of SomeClassB is taken from the caller at runtime. Is there a similar way of doing this in Dagger? 回答1: Because

Can I use some kind of assisted Inject with Dagger?

喜你入骨 提交于 2020-01-19 04:10:37
问题 With Google Guice or Gin I can specify parameter with are not controlled by the dependency injection framework: class SomeEditor { @Inject public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) { } } The assisted parameter stage is specified at the time an instance of SomeEditor is created. The instance of SomeClassA is taken from the object graph and the instance of SomeClassB is taken from the caller at runtime. Is there a similar way of doing this in Dagger? 回答1: Because

How to inject a “runtime” dependency like a logged in user which is not available at application boot time?

大兔子大兔子 提交于 2020-01-02 22:18:13
问题 I'm just not getting this: I use Gin in my java GWT app to do DI. The login screen is integrated into the full application window. After the user has logged in I want to inject the user object into other classes like GUI Presenters which I create, so I have some sort of runtime dependency I believe. How do i do that? One solution I can think of is sth like: class Presenter { @Inject Presenter(LoggedInUserFactory userFactory) { User user = userFactory.getLoggedInUser(); } } class