一款基于 Web 的 Go 语言 IDE
简介
Wide 是一款基于 Web 的 Go 语言 IDE。
动机
目前较为流行的 Go IDE 都有一些缺陷或遗憾:
文本编辑器类(vim/emacs/sublime/Atom 等):对于新手门槛太高,搭建复杂
插件类(goclipse、IDEA 等):需要原 IDE 支持,不够专业
LiteIDE 界面不够 modern、goland 收费
缺少网络分享、嵌入网站可运行功能
另外,Go IDE 很少,用 Go 本身开发的 IDE 更是没有,这是一次很好的尝试。关于产品定位的讨论请看这里。
特性
基于 Web 的 IDE:
只需要浏览器就能进行开发、运行
跨平台,甚至在移动设备上
易进行功能扩展
易与其他系统集成
极客体验
核心功能:
代码高亮、折叠:Go/HTML/JavaScript/Markdown 等
自动完成:Go/HTML 等
编译检查:编辑器提示编译错误
格式化:Go/HTML/JSON 等
运行:支持同时运行多个程序
代码导航:跳转到声明,查找使用,文件搜索等
Web 开发:前端(HTML/JS/CSS)开发支持
go tool:go mod/install/fmt 等
项目文件导出
UI/编辑器多主题
支持交叉编译
界面
主界面
跳转到文件
自动完成
主题
查看表达式
构建报错提示
交叉编译
Playground
架构
构建与运行
一个浏览器 tab 对应一个 Wide 会话
通过 WebSocket 进行程序执行输出推送
客户端浏览器发送 Build 请求
服务器使用 os/exec 执行 go build 命令
2.1. 生成可执行文件
客户端浏览器发送 Run 请求
服务器使用 os/exec 执行文件
4.1. 生成进程
4.2. 运行结果输出到 WebSocket 通道
客户端浏览器监听 ws.onmessage 到消息后做展现
代码辅助
自动完成
查找使用
浏览器客户端发送代码辅助请求
Handler 根据请求对应的 HTTP 会话获取用户工作空间
执行 gocode/ide_stub(gotools) 命令
3.1. 设置环境变量(${GOPATH} 为用户工作空间路径)
3.2. gocode 命令需要设置参数 lib-path
文档
社区
授权
鸣谢
安装
前提
在安装 Wide 前需要搭建好 Go 开发环境:
下载并安装 Go (>=1.12)
确认环境变量 GOPATH,GOROOT 已经配置正确
从源代码安装
下载 或通过 git clone https://github.com/88250/wide 获取源码
安装依赖:go get github.com/visualfc/gotools github.com/nsf/gocode
编译 Wide:go build
Go 格式化工具
默认是使用 gofmt 进行 Go 源码格式化的。如果要使用 goimports,需要做如下调整:
安装 goimports:go get -u github.com/bradfitz/goimports
在“偏好设定” -> “Go 工具” -> “Go 格式化”中选择 goimports
多用户
支持多个用户同时使用一个 Wide 服务器,每个用户有自己独立的源代码仓库,编码/运行/调式都是在自己的工作空间中进行,不会影响其他用户。
工作空间
Wide 的工作空间就是 Go 中的 workspaces,也就是 $GOPATH 指定的路径。
运行时
用户在运行程序时进程是跑在服务器上的,所以多用户同时运行程序时最常见的问题就是资源冲突(比如网络端口),目前这个问题只能靠用户自行规避。
编辑器
Tabs
新打开一个文件会新开一个编辑器,最多可以打开 64 个编辑器
焦点切换到编辑器(Ctrl+0)时,左边的文件树也会选中相关的文件
在多个 tabs 之间切换快捷键:Ctrl+Tab
关闭当前编辑器快捷键:Ctrl+W
文件保存
在下面几种情况发生时会保存编辑器内容:
保存/格式化:将保存当前编辑器的内容
构建 & 运行/go install:将保存所有打开的编辑器的内容
自动完成/跳转到声明/查找使用:将保存当前编辑器的内容
我们基本可以认为在写代码时文件是_实时自动保存_的。
键盘快捷键
编辑器
Ctrl-\:自动补全
Ctrl-B:跳转到声明
Ctrl-I:查看表达式信息
Alt-F7:查找使用
Alt-Shift-F:格式化
Ctrl-L:跳转到行
Ctrl-E:删除当前行
Shift-Ctrl-Up:复制到上方
Shift-Ctrl-Down:复制到下方
Shift-Alt-Up:移动到上方
Shift-Alt-Down:移动到下方
Ctrl-S:保存当前编辑器文件
Shift-Ctrl-S:保存所有编辑器文件
Ctrl-Q:关闭当前编辑器
Shift-Alt-Enter:编辑器全屏
Shift-Tab:自动缩进
Ctrl-]:缩进
Ctrl-[:反缩进
搜索
Shift-Alt-O:打开文件
Ctrl-F:搜索/查找
Ctrl-G:查找下一个
Shift-Ctrl-G:查找上一个
Shift-Ctrl-F:替换
Shift-Ctrl-R:替换全部
焦点
Ctrl-D:切换编辑器/窗口组 tab
Ctrl-0:焦点切换到编辑器
Ctrl-1:焦点切换到文件树
Ctrl-4:焦点切换到输出窗口
Ctrl-5:焦点切换到搜索窗口
Ctrl-6:焦点切换到通知窗口
运行
F5:构建
F6:构建 & 运行
Alt-C:清空输出窗口
文件树
上/下:选择
左/右:收起/展开
Ctrl-R:重命名
国际化
目前 Wide 支持以下几种语言:
简体中文(zh_CN)
繁体中文(zh_TW)
美式英语(en_US)
日语(ja_JP)
默认为简体中文。可以在 wide.json 中的 Locale 项进行配置(用户的配置会覆盖全局的默认配置),配置完后需要重启。
FAQ
wide.json 是什么?
wide.json 是 Wide 的配置文件,路径是 conf/wide.json。Wide 的所有配置(例如服务 IP、端口、区域等)都是保存在这个文件中的。
如果 Wide 是个人使用,那么默认的配置应该可以很好的工作,不需要修改任何地方。
什么是工作空间?
工作空间是当前用户的 $GOPATH 路径,一个用户只能有一个工作空间。
Windows 上构建时出现“Access is denied”
需要“以管理员身份运行”。
文件树里的 Go API 目录是什么?
该目录是读取 $GOROOT/src 生成的,方便用户查看 Go API 源代码。 在该目录下是不允许新建、编辑、删除文件的。
为什么代码辅助功能(自动完成/跳转到声明等)失效了?
请确认正确安装了 gocode 和 gotools 工具。安装命令:
go get -u github.com/visualfc/gotools
go get -u github.com/nsf/gocode
如果安装不正确,Wide 会自动检查并通过通知窗口告知用户。另外,通知窗口还会告知用户一些其他重要信息,例如 IDE 版本更新提醒等。