简介
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 使用 Apache License, Version 2 开源协议。
鸣谢
安装
前提
在安装 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 版本更新提醒等。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于