07月11日
为什么要在 WebIDE 中安装 Go

当发现了一个有趣的 Go 项目,想要将其跑起来看看改改,最快的方法是什么?

因项目有一个要获取图片不同尺寸的需求(商品图片在不同地方显示的问题~), 于是大佬扔给我一个 Go 开源项目 imageserver 的可执行文件
很好很强大,可以通过参数将本地图片生成对应尺寸返回等~

恰巧之前也学了一下 Go
恰巧有一台腾讯云服务器空着
恰巧之前发布了一个工具类的 Chrome 插件
然后就有了一个集成在线生成不同尺寸图片的服务进去的想法
然后下载依赖包成了我的一大难题,网络的不稳定和劣质的路由器无端的耗着我的热度
然后我就想到了 Coding 的 WebIDE,那的网速就以前使用来看完全比我本地强太多。

网速测试结果令人满意

图片

工欲善其事必先利其器,先在 WebIDE 把环境安装起来吧。

执行脚本构建环境

简简单单,将其粘贴到 WebIDE 终端回车即可安装 go1.10 至你的工作空间即可,每一步都有详细说明

echo 1.下载 go1.10 ,如果当前目录有压缩包着不下载
sudo [ ! -f go1.10.linux-amd64.tar.gz ] && curl -O https://storage.googleapis.com/golang/go1.10.linux-amd64.tar.gz

# 当前项目的路径为:/home/coding/workspace===$HOME/home/coding
# 解压目录:/home/coding/go===$HOME/go
echo '2.解压到工作空间的上层目录'
sudo tar -C $HOME -zxvf go1.10.linux-amd64.tar.gz

echo '3.配置 $GOROOT'
echo "export GOROOT=$HOME/go">>~/.zshrc

echo '4.配置 $GOPATH 为当前工作空间'
echo "export GOPATH=$HOME/workspace">>~/.zshrc

# 重载后才能使用 $GOROOT,$GOPATH 否则无法写入到 $PATH
echo '5.重载环境变量'
source ~/.zshrc

echo '6.将 $GOROOT/bin,$GOPATH/bin 写入到 $PATH'
echo "export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:">>~/.zshrc

echo '7.再次重载环境变量'
source ~/.zshrc

echo '8.验证安装配置结果'
go version

安装后的一些说明

安装完成后当前工作空间即是 $GOPATH 目录,故我们的项目代码应当是在 workspace/src/ 中,个人推荐目录结构如下所示
图片

若 src/github.com 不想让其在左侧目录树显示可点左上角 coding 图标-设置隐藏文件
在项目文件夹使用 go get 即可获取引用的包,有些被墙的包需要 clone 到指定目录

godep 的安装使用

你可能还需要一个 go 的包管理工具来管理依赖包进行版本控制,我个人比较喜欢使用 godep
安装:go get -v github.com/tools/godep
生成 Godeps&vendor:godep save
还原依赖到 $GOPATH:godep restore

现在,你可以愉快的去 WebIDE 中跑跑 Go 代码了

在 WebIDE 运行图片服务器应用代码

完成了环境的搭建开始写图片服务器代码了,将 imageserver 提供的测试代码粘贴进去

  1. 在当前目录执行:go get -v -d -t 即可获取对应的依赖包
    golang.org 等包可以使用 git 命令 clone 到 src 对应的目录即可
    也写了一个 gopull,获取之后使用gopull https://github.com/golang/image/ $GOPATH/src/golang.org/x/image即可将包获取到指定目录
  2. 执行 go run main.go 就能够启动 8080 端口了,在 WebIDE 右侧添加链接即可访问
  3. 参考其 README.md 添加参数查看效果即可

图片

作者提供的测试代码是取的固定一组图片,使用还是需要对其改造一番,创建自定义 Server 替换 imageserver_testdata.Server(文末附完项目地址)

func newServer() imageserver.Server {
	// srv := imageserver_testdata.Server
	srv := getImgServer()
	srv = newServerImage(srv)
	srv = newServerLimit(srv)
	srv = newServerCacheMemory(srv)
	return srv
}
//自行引入缺失的包
func getImgServer() imageserver.Server {
	return imageserver.Server(imageserver.ServerFunc(func(params imageserver.Params) (*imageserver.Image, error) {
		source, err := params.GetString(imageserver_source.Param)
		if err != nil {
			return nil, err
		}
		//应添加到参数传入
	    filePath := filepath.Join("upload", source)
		data, err := os.Open(filePath)
		if err != nil {
			if os.IsNotExist(err) {
				return nil, &imageserver.ImageError{
					Message: "404",
				}
			}
			panic(err)
		}
		_, format, err := image.DecodeConfig(data)
		if err != nil {
			panic(err)
		}
        b, err := ioutil.ReadFile(filePath)
		if err != nil {
			panic(err)
		}

		im := &imageserver.Image{
			Format: format,
			Data:   b,
		}
		return im, nil
	}))
}

复制图片到 upload 文件夹,运行效果如下
图片

Golang 项目打包

使用 go build 可直接生成当前环境的执行文件,如想要交叉编译可参考Golang 程序交叉编译跨平台的可执行程序(Mac、Linux、Windows )
下面为示例,其中定义的环境变量
$GOARCH 为目标平台的处理器架构(386、amd64、arm)
$GOOS 为编译后的目标平台(darwin、freebsd、linux、windows)

所以在 WebIDE 中,根据需要执行对应命令即可在当前目录生成项目同名的可执行文件

  • Linux 下编译 Linux 可执行程序:
go build
  • Linux 下编译 Windows 64 位可执行程序:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
  • Linux 下编译 Mac 64 位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build

若想指定输出目录使用 -o 参数即可 go build -o dist/myserver

项目代码

完整代码:https://coding.net/u/yimocoding/p/WeDemo/git/tree/GoImgServer
不建议将 WeDemo 项目克隆到工作空间,分支太多,只做参考,按照文章一步步来即可

Cloud Studio 已支持 Go 环境,下篇我将介绍如何在 Cloud Studio 中部署此 Go 应用~

1522

2条评论

不错的,支持一下

匿名2 个月前回复

赞,马上使用。

匿名2 个月前回复