云端golang开发,无需本地配置,能上网就能开发和运行
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
需求
- 学习golang的时候,需要一个IDE,还需要一个能运行程序的环境,以及一个MySQL数据库
- 对于有经验的程序员来说,自己动手安装部署即可,但是小白和懒人也是存在的...
背景
- 背景很简单:欣宸个人情况如下
- 穷:有个能上网的破电脑,甚至电脑都没有,仅有个安卓平板(万幸的是有键盘鼠标,打字没问题)
- 懒:不想安装golang,也不想安装vscode(如果只有安卓平板,就是想装也没办法装)
- 面对这样无可救药的自己,内心还是想拯救一下,于是有了这篇文章,基于GitHub的Codespaces 快速搭建一套云端开发环境,让穷、懒不再拖累我学习的热情...
前提
- 用破电脑凭空打造golang开发环境,需要以下两个前提条件
- 能上网,因为要访问GitHub
- 有个属于自己的GitHub账号
- 准备好以上条件就开始吧
打造环境
- 首先登录GitHub
- 其次准备好一个代码仓库,已有的或现在就新建都可以,我这里用的是旧仓库,里面保存了多年的博客中用到的源码,是个超级大杂烩,有java工程的,也有golang的,还有一些ansible脚本,如下所示,不过没事儿,不影响,都能用

- 然后按照下图的数字顺序进行操作,进入云端开发环境的设置页面

- 然后按照下图操作,选择配置模板

- 按照下图操作,获取到配置模板,然后粘贴到自己项目的配置区域,再提交保存,这样就完成了自己的golang云开发环境配置

- 注意上面的内容,共有两个配置项
- 部署了go1.18版本,您可以根据自己的需要修改,我这改成了1.19
- 安装了docker(配置里叫docker-in-docker,因为咱们的云开发环境就是个docker容器,官方文档中有说明)
- 然后回到仓库主页面,按照如下操作,即可创建一个云开发环境,用的是前面的配置

- 然后需要等待几分钟,GitHub会根据您的配置创建新的云开发环境
- 稍作等待就会跳转到web版本的vscode页面,如下图(安卓平板电脑浏览器截图),资源管理器的内容就是您的GitHub仓库的内容,由于我的仓库中有很多java旧代码,被vscode识别到之后会提示安装JDK,请无视掉这些提示,因为它们都和本篇无关

- 如下图,在控制台查看golang和docker的版本,都符合预期,微软真是给力,web版IDE和服务器都白送

- 用top命令查看资源情况,发现是2核4G的服务器资源

- 其实微软还算慷慨,免费资源最多给到了4核8G,咱们回到仓库页面去调整一下,如下图

- 如下图修改配置,并使其立即生效

- 至此,环境准备好了,咱们来写代码验证一下
设置GO111MODULE
- 记得用go env看一下GO111MODULE环境变量的设置,因为接下来的项目是基于go mod进行管理的,所以要打开这个设置,最好是执行以下命令,使其生效
go env -w GO111MODULE=on
验证之一:helloworld
- 接下来咱们基于gin新建一个web服务,试试这个开发环境能否正常使用
- 在web版的vscode上,找个干净目录,例如我这边新建名为test003的文件夹
- 用go mod命令新建module
go mod init test003
- 下载和安装gin
go get -u github.com/gin-gonic/gin
- 新建main.go文件,内容如下
package main
import "github.com/gin-gonic/gin"
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello world",
})
})
router.Run()
}
- 执行go mod tidy解决依赖
- 最后执行go run main.go将服务运行起来
@zq2599 ➜ /workspaces/blog_demos/tutorials/test003 (dev) $ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET / --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2023/02/04 - 14:10:22 | 200 | 58.7µs | 220.246.254.226 | GET "/"
[GIN] 2023/02/04 - 14:10:22 | 404 | 900ns | 220.246.254.226 | GET "/favicon.ico"
- 再去看端口这个Tab页,如下图,发现gin监听的8080端口已经被forward到一个公网地址,点击红色箭头的图标,用浏览器访问这个地址

- 能够收到body响应,证明刚才的代码已经生效了,至此云端的IDE和运行环境都验证通过

- 至此,云端开发运行基本的web应用没问题了,咱们再试试数据库的部署和操作
验证之二:docker部署MySQL
- go服务操作MySQL数据库是很常见的,这里咱们也在云开发环境验证一下
- 现在的环境已部署了docker服务,所以用docker安装MySQL最省事儿,一行命令即可
docker run \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mariadb:10.3
- 微软服务器的网络情况真好,如下图,docker镜像下载得飞快

- 进入容器
docker exec -it mysql /bin/bash
- 现在已经在MySQL容器中了,执行以下命令直接进入mysql命令行模式
mysql -uroot -p123456
- 新建名为demo的数据库
create database demo;
use demo;
- 数据库准备完毕,接下来接着刚才的module继续开发,先安装gorm和MySQL驱动
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
- 再在gin上新增一个路由,对应的操作是接收求参数,在数据库新增一条记录,由于代码过于简单就不多废话了,在下面直接全部贴出来
package main
import (
"fmt"
"strconv"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Student struct {
gorm.Model
Name string
Age uint64
}
// 全局数据库 db
var db *gorm.DB
// 包初始化函数,可以用来初始化 gorm
func init() {
// 账号
username := "root"
// 密码
password := "123456"
// mysql 服务地址
host := "127.0.0.1"
// 端口
port := 3306
// 数据库名
Dbname := "demo"
// 拼接 mysql dsn,即拼接数据源,下方 {} 中的替换参数即可
// {username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local&timeout=10s&readTimeout=30s&writeTimeout=60s
// timeout 是连接超时时间,readTimeout 是读超时时间,writeTimeout 是写超时时间,可以不填
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
// err
var err error
// 连接 mysql 获取 db 实例
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
// 设置数据库连接池参数
sqlDB, _ := db.DB()
// 设置数据库连接池最大连接数
sqlDB.SetMaxOpenConns(10)
// 连接池最大允许的空闲连接数,如果没有sql任务需要执行的连接数大于2,超过的连接会被连接池关闭
sqlDB.SetMaxIdleConns(2)
// 建表
db.AutoMigrate(&Student{})
}
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello world",
})
})
router.GET("/create", func(c *gin.Context) {
name := c.DefaultQuery("name", "小王子")
ageStr := c.DefaultQuery("age", "1")
var age uint64
var err error
if age, err = strconv.ParseUint(ageStr, 10, 32); err != nil {
age = 1
}
fmt.Printf("name [%v], age [%v]\n", name, age)
student := &Student{
Name: name,
Age: age,
}
if err := db.Create(student).Error; err != nil {
c.JSON(500, gin.H{
"code": 0,
"message": "insert db error",
})
return
}
c.JSON(200, gin.H{
"code": 0,
"message": fmt.Sprintf("insert db success [%+v]", student.Model.ID),
})
})
router.Run()
}
- 再次执行go run main.go运行应用,继续使用云开发环境给出的forward地址,如下图红色箭头所指,这次要在后面加上path和参数/create?name=Tom&age=10

- 浏览器成返回新增记录的id

- 登录MySQL查一下表,如下,数据全部写入成功
root@5e9f15ab9ac1:/# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.3.37-MariaDB-1:10.3.37+maria~ubu2004 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [demo]> select * from students;
+----+-------------------------+-------------------------+------------+------+------+
| id | created_at | updated_at | deleted_at | name | age |
+----+-------------------------+-------------------------+------------+------+------+
| 1 | 2023-02-05 02:05:56.733 | 2023-02-05 02:05:56.733 | NULL | Tom | 10 |
| 2 | 2023-02-05 02:09:35.537 | 2023-02-05 02:09:35.537 | NULL | Tom | 10 |
| 3 | 2023-02-05 02:10:43.815 | 2023-02-05 02:10:43.815 | NULL | Tom | 10 |
| 4 | 2023-02-05 02:10:45.069 | 2023-02-05 02:10:45.069 | NULL | Tom | 10 |
| 5 | 2023-02-05 02:10:45.717 | 2023-02-05 02:10:45.717 | NULL | Tom | 10 |
| 6 | 2023-02-05 02:10:46.000 | 2023-02-05 02:10:46.000 | NULL | Tom | 10 |
| 7 | 2023-02-05 02:10:46.213 | 2023-02-05 02:10:46.213 | NULL | Tom | 10 |
| 8 | 2023-02-05 02:10:46.578 | 2023-02-05 02:10:46.578 | NULL | Tom | 10 |
| 9 | 2023-02-05 02:10:46.780 | 2023-02-05 02:10:46.780 | NULL | Tom | 10 |
| 10 | 2023-02-05 02:10:46.976 | 2023-02-05 02:10:46.976 | NULL | Tom | 10 |
| 11 | 2023-02-05 02:10:47.155 | 2023-02-05 02:10:47.155 | NULL | Tom | 10 |
| 12 | 2023-02-05 02:10:47.359 | 2023-02-05 02:10:47.359 | NULL | Tom | 10 |
+----+-------------------------+-------------------------+------------+------+------+
12 rows in set (0.000 sec)
桌面版
可能有些读者对网页面的IDE心存顾虑:操作流畅度和体验方面与传统桌面版有差距,或者说习惯了桌面版(主要是不像欣宸这么穷,破电脑只够运行浏览器),这时候还可以用本地桌面版远程连接云开发环境,这时候编码在本地vscode,而编译运行还在之前的云环境进行,既解决了习惯问题,又不影响白嫖微软服务器,依旧是快乐满满,具体操作方法如下,点击红色箭头所指的菜单

此时浏览器就会拉起本地vscode

拉起的过程可能没那么顺利,会要求您的vscode登录GitHub账号,然后再重新拉起,多折腾几次就可以了,拉起后的效果如下,和在本地运行项目看不出区别

一切都符合预期,可见微软诚不欺我,4核8G服务器资源免费用,诚意满满
这下似乎找不到偷懒的理由了,电脑破没关系,不想安装设置也没关系,没有服务器也没关系,GitHub都为你准备好了,还有什么理由不静下心来认真学习呢?
了解更多codespaces详情,请访问官方资料:https://docs.github.com/zh/codespaces/overview
欢迎关注博客园:程序员欣宸
云端golang开发,无需本地配置,能上网就能开发和运行的更多相关文章
- 快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础
上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是W ...
- XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端
XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端 源起一个App项目,Web服务器就一台,已经装了 ...
- VUE开发请求本地数据的配置,旧版本dev-server.js,新版本webpack.dev.conf.js
VUE开发请求本地数据的配置,早期的vue-lic下面有dev-server.js和dev-client.js两文件,请求本地数据在dev-server.js里配置,最新的vue-webpack-te ...
- 【VueJS】VueJS开发请求本地json数据的配置
VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...
- vue开发请求本地模拟数据的配置方法(转)
VUE开发请求本地数据的配置,早期的vue-lic下面有dev-server.js和dev-client.js两文件,请求本地数据在dev-server.js里配置,最新的vue-webpack-te ...
- 使用Golang开发一个本地代理
引言 最近需要对接一个接口,人家提供了两种调用方式,第一种是基于IE浏览器的Active,第二种是动态链接库dll.我们公司的产品不支持IE,所以只能通过调用dll来完成了. 之前我已经用Java实现 ...
- Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装
1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...
- 使用VSCode在本地电脑上对树莓派远程开发
目的及原理 有时身边没有额外的显示器和键盘,或者有时树莓派在另一个屋子连接着路由器,那么当我们想在树莓派上做开发时就可以使用VS Code的远程开发能力.下面一张图显而易见地说明了远程开发的工作原理( ...
- 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- 信息安全系统设计基础实验一:Linux开发环境的配置和使用
北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础 班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩: 指导教师:娄家鹏 ...
随机推荐
- 【调制解调】DSB 双边带调幅
说明 学习数字信号处理算法时整理的学习笔记.同系列文章目录可见 <DSP 学习之路>目录,代码已上传到 Github - ModulationAndDemodulation.本篇介绍 DS ...
- CF1794B Not Dividing题解
如果 \(a_i\) 可以整除 \(a_{i - 1}\),只要在 \(a_i\) 上 \(+1\) 即可,这样 \(a_i \bmod a_{i - 1} = 1\) 就满足题目要求了,如果这样算来 ...
- 烧死10亿脑细胞的SQL长啥样?
1 前言 今天在生产中碰到了一个让我十分费解的 SQL,十分有趣. 2 现象 SQL 很好复现,就是逻辑看起来有点唬人 postgres=# create table test(id1 int,id2 ...
- Elementary OS old version download 旧版本下载
Elementary OS 号称是最漂亮的Linux发行版,没有之一.确实,他的整体风格看起来就是特别舒服,说不出哪里特别好,但也挑不出什么毛病.相比之下,其他Linux的界面总感觉不太和谐.比如特别 ...
- quarkus实战之六:配置
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus实战>系列 ...
- 没有显示器可用的电脑找IP
一台在手边没有显示器可用的电脑找IP记录 问题 老大给我一台服务器(在我前面的工位)让我自己玩,但是不知道IP地址,我本来想用自己的显示器连上,结果两个DHMI口试过都没反应,不知道ip地址就没法连上 ...
- win10安装mysql-8.0.19-winx64
第一步:去官网下载安装 (重点)第二步:先解压,然后在mysql下创建一个my.ini文件,更改my.ini文件里面的两行安装目录,第二行加上\data,my.ini文件不能多或少一个符号,内容见文章 ...
- HTTPS 是这样握手的
HTTP协议默认是明文传输,存在一定的安全隐患,容易被中间人窃听和攻击,在 加密解决HTTP协议带来的安全问题 中提到使用哈希.对称加密.非对称加密等方式对数据加密,能解决数据安全的问题. 以上加密方 ...
- [prometheus]配置alertmanager和钉钉告警
目录 prometheus发起告警的逻辑 节点 配置alertmanager 配置钉钉告警插件 配置supervisor守护进程 关联prometheus和alertmanager prometheu ...
- AI绘画StableDiffusion:云端在线版免费使用笔记分享-Kaggle版
玩AI绘画(SD),自己电脑配置不够?今天给大家介绍一下如何baipiao在线版AI绘画StableDiffusion. Kaggle 是世界上最大的数据科学社区,拥有强大的工具和资源,可帮助您实现数 ...