其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序. 当然,首先要说的是环境变量$GOPATH,项目构建全靠它.这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔. Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构. 举个例子比啥都强,目录结构如下: <proj> |--<…
golang项目中使用条件编译 C语言中的条件编译 golang中没有类似C语言中条件编译的写法,比如在C代码中可以使用如下语法做一些条件编译,结合宏定义来使用可以实现诸如按需编译release和debug版本代码的需求 #ifndef #define ... #end golang中的条件编译 golang支持两种条件编译的实现方式 build tags 文件后缀 1. 通过Build tags实现 build tags 是通过代码注释的形式实现的,要写在文件的最顶端: go build指令在…
golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个Context了. 关于Context的四种结构,CancelContext,TimeoutContext,DeadLineContext,ValueContext的使用在这一篇快速掌握 Golang…
记一次SSM项目小结(一) ssm框架 环境配置 服务器配置 解决方法  拦截器重定向到localhost nginx和tomcat中session失效 mybatis的xml文件不生效 数据库用户创建.权限.及远程连接 pagehelper配置报错 百度情感倾向分析接口使用 拦截器重定向的问题,拦截器重定向到到了localhost 当把代码上传到服务器后,登录拦截器进行重定向,然后重定向到了localhost 解决办法:将重定向为绝对网址 这样的话,拦截器进行重定向就不会重定向到localho…
概述 最近使用golang开发项目时, 发现有时需要同时进行多个golang项目. 在这种情况下, 如果把所有的项目都放在 GOPATH 之下, 不仅管理麻烦(因为各个项目需要提交到不同的代码库), 而且编译的时候也不方便(如果不指定项目, 就会编译所有的项目). 于是, 就想如何将各个项目在物理上就隔离开. 我是用emacs开发golang项目的, 所以隔离之后, 还要考虑如何让emacs的golang插件能够正常工作. 使用 gb 隔离各个 golang 项目 gb 是用来管理golang项…
关于go get安装git golang项目时报错的处理办法 使用go get安装github上的项目时一般来说,不可避免会出错.各种错误的处理办法: 必须条件: 1.安装git并配置环境变量.下载地址:http://git-scm.com/ 2.安装golang环境,并配置好环境变量. 其它错误: 1.提示 missing Mercurial command 需要下载安装Mercurial软件tortoisehg.地址:mercurial.selenic.com 下载不了?那得自备梯子. 2.…
Golang项目的测试实践 最近有一个项目,链路涉及了4个服务.最核心的是一个配时服务.要如何对这个项目进行测试,保证输出质量,是最近思考和实践的重点.这篇就说下最近这个实践的过程总结. 测试金字塔 按照Mike Cohn提出的"测试金字塔"概念,测试分为4个层次 最下面是单元测试,单元测试对代码进行测试.再而上是集成测试,它对一个服务的接口进行测试.继而是端到端的测试,我也称他为链路测试,它负责从一个链路的入口输入测试用例,验证输出的系统的结果.再上一层是我们最常用的UI测试,就是测…
记XX银行保全项目性能问题分析优化 数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点.假如腰椎出问题了,在强壮的上半身或者下半身也是只能说身体瘫痪着. 就如数据库设计很优良或者JAVA应该设计开发代码写得非常优化,但是在JAVA应用代码与数据库之间的桥梁没设计衔接好,彼此之间的数据交互沟通不顺畅,那性能问题还是非常严重的.如资源型的内存泄漏.系统频繁抛出各种异常等现在导致影响系统性能…
简介 在Go服务中,对于每个请求,都会起一个协程去处理.在处理协程中,也会起很多协程去访问资源,比如数据库,比如RPC,这些协程还需要访问请求维度的一些信息比如说请求方的身份,授权信息等等.当一个请求被取消或者超时的时候,其他所有协程都应该立即被取消以释放资源. Golang的context包就是用来传递请求维度的数据.信号.超时给处理该请求的所有协程的.在处理请求的方法调用链中,必须传递context,当然也可以使用WithCancel, WithDeadline, WithTimeout或者…
一.背景 在golang中,最主要的一个概念就是并发协程 goroutine,它只需用一个关键字 go 就可以开起一个协程,并运行. 一个单独的 goroutine运行,倒也没什么问题.如果是一个goroutine衍生了多个goroutine,并且它们之间还需要交互-比如传输数据,那彼此怎么传输数据呢?如果一个子goroutine取消了,要取消跟其相关的goroutine,怎么样才可以做到? 比如说:在go web服务器中,每个请求request都是在一个单独的goroutine进行,这些 go…