如何配置go语言集成开发环境 vim

Python010

如何配置go语言集成开发环境 vim,第1张

1、编译vimgdb

下载vimgdb73和vim73

mkdir -p ./tmp

cd tmp

tar zxvf ../vim-7.3.tar.gz

unzip ../vimgdb-for-vim7.3-master.zip

mv vimgdb-for-vim7.3-master vimgdb-for-vim7.3

patch -p0 <vimgdb-for-vim7.3/vim73.patch

cd vim73

安装依赖

sudo apt-get install build-essential

sudo apt-get build-dep vim-gtk

sudo apt-get install libncurses5-dev

安装

// 这里直接执行make的操作

make

sudo make install

安装vimgdb runtime

cd ../vimgdb-for-vim7.3

cp vimgdb_runtime ~/.vim/bundle

打开vim

:helptags ~/.vim/bundle/vimgdb_runtime/doc " 生成doc文件

添加配置.vimrc

" vimgdb插件

run macros/gdb_mappings.vim

在vim中执行gdb时,报 “Unable to read from GDB pseudo tty” 的错误,因为没有安装 gdb ,所以安装gdb

sudo apt-get install gdb

2、安装vundle

set up vundle

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

Configure Plugins

在.vimrc文件的开头添加下面的内容,有些不是必须的,可以注掉

set nocompatible " be iMproved, required

filetype off " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/vundle/

call vundle#rc()

" alternatively, pass a path where Vundle should install plugins

"let path = '~/some/path/here'

"call vundle#rc(path)

" let Vundle manage Vundle, required

Plugin 'gmarik/vundle'

" The following are examples of different formats supported.

" Keep Plugin commands between here and filetype plugin indent on.

" scripts on GitHub repos

Plugin 'tpope/vim-fugitive'

Plugin 'Lokaltog/vim-easymotion'

Plugin 'tpope/vim-rails.git'

" The sparkup vim script is in a subdirectory of this repo called vim.

" Pass the path to set the runtimepath properly.

Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}

" scripts from http://vim-scripts.org/vim/scripts.html

Plugin 'L9'

Plugin 'FuzzyFinder'

" scripts not on GitHub

Plugin 'git://git.wincent.com/command-t.git'

" git repos on your local machine (i.e. when working on your own plugin)

Plugin 'file:///home/gmarik/path/to/plugin'

" ...

filetype plugin indent on " required

" To ignore plugin indent changes, instead use:

"filetype plugin on

"

" Brief help

" : PluginList - list configured plugins

" : PluginInstall(!)- install (update) plugins

" : PluginSearch(!) foo - search (or refresh cache first) for foo

" : PluginClean(!) - confirm (or auto-approve) removal of unused plugins

"

" see :h vundle for more details or wiki for FAQ

" NOTE: comments after Plugin commands are not allowed.

" Put your stuff after this line

Install Plugins

Launch vim and run

: PluginInstall

vim +PluginInstall +qall

3、官方vim-lang插件

Config vim file .vimrc,Add content bellow in bottom of the file

" 官方的插件

" Some Linux distributions set filetype in /etc/vimrc.

" Clear filetype flags before changing runtimepath to force Vim to

" reload them.

filetype off

filetype plugin indent off

set runtimepath+=$GOROOT/misc/vim

filetype plugin indent on

syntax on

autocmd FileType go autocmd BufWritePre Fmt

4、代码补全的插件gocode

配置go的环境变量,比如我的配置,GOPATH变量是必须要配置的,PATH中必须把GOPATH的bin也添加进去,否则没有自动提示,会提示找不到模式

export GOROOT=/usr/local/go

export GOPATH=/data/app/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Set up gocode

Then you need to get the appropriate version of the gocode, for 6g/8g/5g compiler you can do this:

go get -u github.com/nsf/gocode (-u flag for "update")

Configure vim in .vimrc file

Plugin 'nsf/gocode', {'rtp': 'vim/'}

Install Plugins

Launch vim and run

: PluginInstall

vim +PluginInstall +qall

写一个helloword程序,输入fmt后按<C-x><C-o>如果能看到函数的声明展示出来,说明安装是正确的。

4、代码跳转提示godef

Set up godef

go get -v code.google.com/p/rog-go/exp/cmd/godef

go install -v code.google.com/p/rog-go/exp/cmd/godef

git clone https://github.com/dgryski/vim-godef ~/.vim/bundle/vim-godef

Configure vim in .vimrc file

Bundle 'dgryski/vim-godef'

Install Plugins

Launch vim and run

: PluginInstall

vim +PluginInstall +qall

5、代码结构提示gotags

Set up gotags

go get -u github.com/jstemmer/gotags

Put the following configuration in your vimrc:

Bundle 'majutsushi/tagbar'

nmap :TagbarToggle

let g:tagbar_type_go = {

\ 'ctagstype' : 'go',

\ 'kinds' : [

\ 'p:package',

\ 'i:imports:1',

\ 'c:constants',

\ 'v:variables',

\ 't:types',

\ 'n:interfaces',

\ 'w:fields',

\ 'e:embedded',

\ 'm:methods',

\ 'r:constructor',

\ 'f:functions'

\ ],

\ 'sro' : '.',

\ 'kind2scope' : {

\ 't' : 'ctype',

\ 'n' : 'ntype'

\ },

\ 'scope2kind' : {

\ 'ctype' : 't',

\ 'ntype' : 'n'

\ },

\ 'ctagsbin' : 'gotags',

\ 'ctagsargs' : '-sort -silent'

\ }

命令模式下按在右边就会显示当前文件下的函数名,结构体名等等,光标放到相应的tag上,按回车可以快速跳到程序中的相应位置。

再次按会关闭tag窗口。

PS:本地的.vimrc的配置

" 插件管理器 vundle

set nocompatible " be iMproved, required

filetype off " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/vundle/

call vundle#rc()

" alternatively, pass a path where Vundle should install plugins

"let path = '~/some/path/here'

"call vundle#rc(path)

" let Vundle manage Vundle, required

Plugin 'gmarik/vundle'

" The following are examples of different formats supported.

" Keep Plugin commands between here and filetype plugin indent on.

" scripts on GitHub repos

" Plugin 'tpope/vim-fugitive'

" Plugin 'Lokaltog/vim-easymotion'

" Plugin 'tpope/vim-rails.git'

" The sparkup vim script is in a subdirectory of this repo called vim.

" Pass the path to set the runtimepath properly.

" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}

" scripts from http://vim-scripts.org/vim/scripts.html

" Plugin 'L9'

" Plugin 'FuzzyFinder'

" scripts not on GitHub

" Plugin 'git://git.wincent.com/command-t.git'

" git repos on your local machine (i.e. when working on your own plugin)

" Plugin 'file:///home/gmarik/path/to/plugin'

" ...

"

filetype plugin indent on " required

" To ignore plugin indent changes, instead use:

" filetype plugin on

"

" Brief help

" : PluginList - list configured plugins

" : PluginInstall(!) - install (update) plugins

" : PluginSearch(!) foo - search (or refresh cache first) for foo

" : PluginClean(!) - confirm (or auto-approve) removal of unused plugins

"

" see :h vundle for more details or wiki for FAQ

" NOTE: comments after Plugin commands are not allowed.

" Put your stuff after this line

syntax on

" ********************************************************************

" 这里省略了其它不相关的插件

" vimgdb插件

run macros/gdb_mappings.vim

" 官方的插件

" Some Linux distributions set filetype in /etc/vimrc.

" Clear filetype flags before changing runtimepath to force Vim to

" reload them.

filetype off

filetype plugin indent off

set runtimepath+=$GOROOT/misc/vim

filetype plugin indent on

syntax on

autocmd FileType go autocmd BufWritePre <buffer>Fmt

" 代码补全的插件

Bundle 'Blackrush/vim-gocode'

" 代码跳转提示

Bundle 'dgryski/vim-godef'

" 代码结构提示

Bundle 'majutsushi/tagbar'

nmap <F8>:TagbarToggle<CR>

let g:tagbar_type_go = {

\ 'ctagstype' : 'go',

\ 'kinds' : [

\ 'p:package',

\ 'i:imports:1',

\ 'c:constants',

\ 'v:variables',

\ 't:types',

\ 'n:interfaces',

\ 'w:fields',

\ 'e:embedded',

\ 'm:methods',

\ 'r:constructor',

\ 'f:functions'

\ ],

\ 'sro' : '.',

\ 'kind2scope' : {

\ 't' : 'ctype',

\ 'n' : 'ntype'

\ },

\ 'scope2kind' : {

\ 'ctype' : 't',

\ 'ntype' : 'n'

\ },

\ 'ctagsbin' : 'gotags',

\ 'ctagsargs' : '-sort -silent'

\ }

如何部署Golang应用

安装supervisord

# 通过载入程式 ez_setup.py 来安装。这个载入程式会联网下载最新版本setuptools来安装,同时也可以更新本地的setuptools。

wget :peak.telemunity./dist/ez_setup.py

sudo python ez_setup.py

# 更新setuptools:

sudo python ez_setup.py -U setuptools

# 安装supervisor

easy_install supervisor

# 生成配置档案

echo_supervisord_conf >/etc/supervisord.conf

# 编辑配置档案

vim /etc/supervisord.conf

# 进入vim后找到最后两行,开启注释(取消前面的分号),

# [include]

# files = supervisor.d/*.ini

# 将所有的supervisor配置都放到 /etc/supervisor.d目录

mkdir /etc/supervisor.d

建立 supervisor 对应程式的配置档案

其中的一些路径需要换成自己对应的,这里将 zankbo 这个web 应用放在了对应的使用者目录下

通过在生产伺服器上设定environment可以在程式里判断是线上还是开发模式,如 zankbo 的 debug判断

当然也可已在启动命令处加入引数,如 mand = /home/zankbo/gopath/src/zankbo/zankbo -d 来关闭Debug模式。

if os.Getenv("APP_NAME") == "ZANKBO_PRODUCT" {

beego.RunMode = "prod"

}

vim /etc/supervisor.d/zankbo.ini

# 写入

[program:zankbo]

directory = /home/zankbo/gopath/src/zankbo

environment=APP_NAME="ZANKBO_PRODUCT"

mand = /home/zankbo/gopath/src/zankbo/zankbo

autostart = true

startsecs = 5

user = zankbo

redirect_stderr = true

stdout_logfile = /home/zankbo/log/zankbo.log

建立对应的使用者

useradd zankbo

# 将使用者加入到zankbo使用者组,Nginx以使用者执行

usermod -a -G zankbo

# 更改使用者家目录使用者组的许可权,使Nginx可以访问

chmod g+rx /home/zankbo

部署Go环境

其中的目录为,go:Go安装目录 gopath:Go工作目录,下面有src、pkg、bin三个目录 log:日志资料夹

[zankbo@MyCloudServer ~]$ pwd

/home/zankbo

[zankbo@MyCloudServer ~]$ vim .bashrc

# 设定Go环境变数,在.bashrc档案末尾写下如下内容

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bi

# 切换到使用者家目录

[root@MyCloudServer ~]# su - zankbo

[zankbo@MyCloudServer ~]$ ls

go gopath log

将专案程式码放到gopath/src下面,如我的播客专案:

[zankbo@MyCloudServer ~]$ tree -L 2 gopath/src/

gopath/src/

├── github.

│ ├── astaxie

│ ├── beego

│ ├── go-sql-driver

│ ├── howeyc

│ ├── jacobsa

│ ├── *** artystreets

│ └── wendal

└── zankbo

├── admin

├── blog

├── build_pkg.sh

├── mon

├── conf

├── controllers

├── dbstruct.mwb

├── main.go

├── models

├── static

├── views

└── zankbo

汇入专案sql档案到资料库

在专案资料夹执行build

[zankbo@MyCloudServer zankbo]$ pwd

/home/zankbo/gopath/src/zankbo

[zankbo@MyCloudServer zankbo]$ go build

会在专案下生成与包名对应的可执行档案,这里为:zankbo,build的时候可能会遇到错误,比如mysql的密码之类的,可根据提示排错。

通过supervisor 来启动服务

# supervisorctl start zankbo

配置Nginx

server {

listen 80

server_name zankbo. zankbo.

root /home/zankbo/gopath/src/zankbo

error_log logs/zankbo..error.log warn

location /static/ {

root /home/zankbo/gopath/src/zankbo

location ~ .*\.(js|css)$ {

aess_log off

expires 1d

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

gzip off

aess_log off

expires 3d

}

}

location / {

proxy_pass :127.0.0.1:8080

}

}

如何部署thinkphp 应用

1、首先在官方网站下载ThinkPHP最新版本。

2、下载后的压缩档案解压到WEB目录(或者任何目录都可以),框架的目录结构为:

├─ThinkPHP.php 框架入口档案

├─Common 框架公共档案

├─Conf 框架配置档案

├─Extend 框架扩充套件目录

├─Lang 核心语言包目录

├─Lib 核心类库目录

│ ├─Behavior 核心行为类库

│ ├─Core 核心基类库

│ ├─Driver 内建驱动

│ │ ├─Cache 内建快取驱动

│ │ ├─Db 内建资料库驱动

│ │ ├─TagLib 内建标签驱动

│ │ └─Template 内建模板引擎驱动

│ └─Template 内建模板引擎

└─Tpl 系统模板目录

注意,框架的公共入口档案ThinkPHP.php是不能直接执行的,该档案只能在专案入口档案中呼叫才能正常执行,这是很多新手很容易犯的一个错误。

3、接下来先在WEB根目录下面建立一个app子目录(这个就是app就是专案名),然后在该目录下面建立一个index.php档案,新增一行简单的程式码:

require '/ThinkPHP框架所在目录/ThinkPHP.php'

这行程式码的作用就是载入ThinkPHP框架的入口档案ThinkPHP.php,这是所有基于ThinkPHP开发应用的第一步。然后,在浏览器中访问这个入口档案。

如何部署应用到was上

websphere的预设使用记忆体应该是256的 你的38的war包部署 不应该出现记忆体崩掉的问题呀。

部署系统也很简单么,就是打成war包,记得打war包得时候要检查web.xml的格式 websphere很在意这个东东的。

然后一步一步的部署就可以了。was慢 但是不会你那么慢得。可以贴error出来看看

如何部署python3 的应用

mod_python,这是apache内建的模组,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐

cgi,这个太old,不推荐,而且nginx不支援cgi方式,只能用ligd或者apache

fastcgi ,这个是目前流行最广的做法,通过flup模组来支援的,在nginx里对应的配置指令是 fastcgi_pass

spawn-fcgi,这个是fastcgi多程序管理程式,ligd安装包附带的,和

flup效果一样,区别是flup是

python程式码级引入,spawn-fcgi是外部程式。spawn-fcgi用途很广,可以支援任意语言开发的代

码,php,python,perl,只要你程式码实现了fastcgi介面,它都可以帮你管理你的程序

scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi协议很简单,我觉得和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支援。

,nginx使用proxy_pass转发,这个要求后端appplication必须内建一个能处理高并发的 server,在python的web框架当中,只能选择tornado.

python程式设计师喜欢发明轮子,tornado除了是一个web framework之外,它还可以单独提供高效能

server,所以,如果你采用其他python框架写程式码,比如说bottle,也一样可以通过import

tornado 来启动一个高效能的

server,同样的可以采用协议和nginx一起来部署。扩充套件开来,python包里面能处理高并发的

server还有很多,比如说gevent,也可以被其他框架引用来支援方式部署。

现实当中,用java来做web程式,通常就用和nginx配合,应用伺服器选择tomcat或者jetty

uwsgi,包括4部分组成,

nginx从0.8.4开始内建支援uwsgi协议,uwsgi协议非常简单,一个4个位元组header+一个body,body可以是很多协议的

包,比如说,cgi等(通过header里面栏位标示),我曾经做个一个小规模的效能对比测试,结果表明,uwsgi和fastcgi相比,效能

没有太明显的优势,也可能是资料集较小的原因

uwsgi的特点在于自带的程序控制程式.它是用c语言编写,使用natvie函式,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支援多种应用框架,包括(python,lua,ruby,erlang,go)等等

uwsgi协议

web server内建支援协议模组

application伺服器协议支援模组

程序控制程式

Gunicorn,和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准(PEP 333 ),根红苗正,而且部署比较简单,:gunicorn./ 上有详细教程

mod_wsgi,apache的一个module,也是支援WSGI协议,:code.google./p/modwsgi/

如何部署简单python + flask应用

python是一款应用非常广泛的指令码程式语言,谷歌公司的网页就是用python编写。python在生物资讯、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他指令码语言如java、R、Perl 一样,都可以直接在命令列里执行指令码程式。

所需工具:

python3.4

flask

nginx

gunicorn

supervisor

系统环境:

Ubuntu 14.04LTS

我们先写一个最基本的flask应用:

demo.py

from flask import Flask

app = Flask(**name**)

@app.route('\')

def index():

return 'Hello World.'

if __name__ == __main__:

app.run()

执行这个py档案,开启浏览器访问127.0.0.1:5000就能看到显示Hello World的页面 .

如果让这个flask引用监听来自公网ip的请求,理论上你跑此程式的机器就相当于一个伺服器了,然而这个伺服器并不完美,所以我们需要nginx和gunicorn来增加它的功能,让它真刀真枪上生产环境的时候能按要求执行。

flask自带的WSGI框架效能很差劲,只能适用于开发环境除错使用。我们用专业一点的gunicorn(还有很多其他优秀的框架)替代flask自带的WSGI框架。

配置完后,通过命令’/usr/local/bin/gunicorn -b127.0.0.1:5000‘启动应用。开启浏览器访问127.0.0.1:5000,同样能够得到返回页面

然而gunicorn也仅仅是一个python的WSGI框架而已,要让它真正处理来自网际网路的各类访问功能还是有点欠缺,这时候就需要用到大名鼎鼎的nginx 伺服器来替gunicorn遮风挡雨了。

Ubuntu下安装nginx可以用命令

sudo apt-get install nginx

安装后需要进行下配置:

cd /etc/nginx/sites-available

sudo vi test (test为配置名称,可以根据自己专案进行命名)

test档案的配置为:

server {

listen 80# 监听80埠

location / {

proxy_pass :127.0.0.1:5000# 代理本机127.0.0.1:5000的服务

}

location /static {

alias /home/ubuntu/myproject/myblog/app/static# 负载均衡

}

}

cd ..

cd sites-enable

sudo ln -s ../sites-available/lwhile . (建立软连结,别漏掉最后的.)

sudo service nginx reload

sudo service nginx restart

这样nginx的基本配置档案就写好了 接下来我们配置程序管理工具supervisor supervisor可以在后面启动你的python程序,这样很方便

1.cd /etc/supervisor/conf.d

2.sudo vi test.conf (test为档名)

[program:test]

mand = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py

3.sudo supervisorctl

4.reload

5.start test

如果一切正常,做完这所有步骤之后,现在公网的ip访问你的主机,就可以开启你的flask应用了

python是一款应用非常广泛的指令码程式语言,谷歌公司的网页就是用python编写。python在生物资讯、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他指令码语言如java、R、Perl 一样,都可以直接在命令列里执行指令码程式。工具/原料

python;CMD命令列;windows作业系统

方法/步骤

1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下相容,体验较差。

2、开启文字编辑器,推荐editplus,notepad等,将档案储存成 .py格式,editplus和notepad支援识别python语法。

指令码第一行一定要写上 #!usr/bin/python

表示该指令码档案是可执行python指令码

如果python目录不在usr/bin目录下,则替换成当前python执行程式的目录。

3、编写完指令码之后注意除错、可以直接用editplus除错。除错方法可自行百度。指令码写完之后,开启CMD命令列,前提是python 已经被加入到环境变数中,如果没有加入到环境变数,请百度

4、在CMD命令列中,输入 “python” + “空格”,即 ”python “;将已经写好的指令码档案拖拽到当前游标位置,然后敲回车执行即可。

对于这个问题,我想说“直接写不就可以了?”

但是,可以更好。vim这个编辑器向来不缺各种插件或配置来挖掘和提升它的能力,百度一下“vim go 开发环境”“vim go ide”“vim go 插件”等等就能找到大量的教程来把vim搞成一个相当好用的go开发环境。

推荐vim插件vim-go