当前位置: 首页> 健康> 知识 > golang web服务搭建学习和优雅的停止服务

golang web服务搭建学习和优雅的停止服务

时间:2025/7/18 12:17:38来源:https://blog.csdn.net/nbplus_007/article/details/140172656 浏览次数:0次

golang web服务搭建学习和优雅的停止服务

这里分享一下golang web服务搭建过程,仅分享安装搭建过程中的配置,相关工具的安装请自行下载安装:

项目打包使用了(go-bindata)包实现将项目静态配置文件编译成二进制嵌入到go文件中,解决了打包时候因相对路径问题,导致的二进制文件不能再任何目录下运行
优雅的启停服务

环境

  1. centos7.8
  2. golang1.15.*
  3. supervisor
  4. git (用于项目代码拉取)

代码配置

go mod文件

该示例使用go mod进行依赖包管理

module goleaninggo 1.15require (github.com/gin-gonic/gin v1.6.3github.com/go-sql-driver/mysql v1.4.1github.com/go-xorm/xorm v0.7.9github.com/fvbock/endlessgithub.com/gohouse/converter v0.0.3 // indirectgithub.com/gohouse/gorose v1.0.5 // indirectgithub.com/jteeuwen/go-bindata v3.0.7+incompatible // indirect
)

demo的入口文件

package mainimport ("encoding/json""fmt""goleaning/tool""log""net/http""strings""github.com/fvbock/endless"
)func parseParams(w http.ResponseWriter, r *http.Request) {r.ParseForm()       //解析参数,默认是不会解析的fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息fmt.Println("path", r.URL.Path)fmt.Println("scheme", r.URL.Scheme)fmt.Println(r.Form["url_long"])for k, v := range r.Form {fmt.Println("key:", k)fmt.Println("val:", strings.Join(v, ""))}fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的}func main() {getConf()http.HandleFunc("/", parseParams)        //设置访问的路由address := fmt.Sprintf("%s:%s", "", viper.GetString("app.port"))s := initServer(address, app)// 保证文本顺序输出// In order to ensure that the text order output can be deletedtime.Sleep(10 * time.Microsecond)fmt.Println("info", "server run success on ", address)fmt.Println("error", "initServer server error ", s.ListenAndServe().Error())
}type server interface {ListenAndServe() error
}// 初始化服务
func initServer(address string, router *gin.Engine) server {s := endless.NewServer(address, router)s.ReadHeaderTimeout = 20 * time.Seconds.WriteTimeout = 20 * time.Seconds.MaxHeaderBytes = 1 << 20return s
}var cfg interface{}func getConf() {conf, err := tool.Asset("config/apps.json")if err != nil {fmt.Println(err)}json.Unmarshal(conf, &cfg)fmt.Println(cfg)
}

二进制编译

在二进制编译文件执行过程中遇到问题:在非命令执行的目录下运行二进制文件会到时配置文件无法正常加载

解决方案:使用go-bindata打包配置文件嵌入到二进制文件

    //命令:会在项目当前目录下生成编译文件go build//在{gopath}/bin/目录下生成编译文件go install//将编译文件移动到相应的位置执行

nginx 配置

nginx代理到相应的监听端口

    server {charset utf-8;client_max_body_size 128M;server_name api.go.cn;location / {try_files $uri @backend;}location @backend {proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header Host            $http_host;proxy_pass http://127.0.0.1:8001;}}

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

关键字:golang web服务搭建学习和优雅的停止服务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: