云端golang开发,无需本地配置,能上网就能开发和运行

这篇具有很好参考价值的文章主要介绍了云端golang开发,无需本地配置,能上网就能开发和运行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

需求

  • 学习golang的时候,需要一个IDE,还需要一个能运行程序的环境,以及一个MySQL数据库
  • 对于有经验的程序员来说,自己动手安装部署即可,但是小白和懒人也是存在的…

背景

  • 背景很简单:欣宸个人情况如下
  1. 穷:有个能上网的破电脑,甚至电脑都没有,仅有个安卓平板(万幸的是有键盘鼠标,打字没问题)
  2. 懒:不想安装golang,也不想安装vscode(如果只有安卓平板,就是想装也没办法装)
  • 面对这样无可救药的自己,内心还是想拯救一下,于是有了这篇文章,基于GitHub的Codespaces 快速搭建一套云端开发环境,让穷、懒不再拖累我学习的热情…

前提

  • 用破电脑凭空打造golang开发环境,需要以下两个前提条件
  1. 能上网,因为要访问GitHub
  2. 有个属于自己的GitHub账号
  • 准备好以上条件就开始吧

打造环境

  • 首先登录GitHub
  • 其次准备好一个代码仓库,已有的或现在就新建都可以,我这里用的是旧仓库,里面保存了多年的博客中用到的源码,是个超级大杂烩,有java工程的,也有golang的,还有一些ansible脚本,如下所示,不过没事儿,不影响,都能用
    golang 在线运行,云原生,golang,github,云计算
  • 然后按照下图的数字顺序进行操作,进入云端开发环境的设置页面
    golang 在线运行,云原生,golang,github,云计算
  • 然后按照下图操作,选择配置模板
    golang 在线运行,云原生,golang,github,云计算
  • 按照下图操作,获取到配置模板,然后粘贴到自己项目的配置区域,再提交保存,这样就完成了自己的golang云开发环境配置
    golang 在线运行,云原生,golang,github,云计算
  • 注意上面的内容,共有两个配置项
  1. 部署了go1.18版本,您可以根据自己的需要修改,我这改成了1.19
  2. 安装了docker(配置里叫docker-in-docker,因为咱们的云开发环境就是个docker容器,官方文档中有说明)
  • 然后回到仓库主页面,按照如下操作,即可创建一个云开发环境,用的是前面的配置
    golang 在线运行,云原生,golang,github,云计算
  • 然后需要等待几分钟,GitHub会根据您的配置创建新的云开发环境
  • 稍作等待就会跳转到web版本的vscode页面,如下图(安卓平板电脑浏览器截图),资源管理器的内容就是您的GitHub仓库的内容,由于我的仓库中有很多java旧代码,被vscode识别到之后会提示安装JDK,请无视掉这些提示,因为它们都和本篇无关
    golang 在线运行,云原生,golang,github,云计算
  • 如下图,在控制台查看golang和docker的版本,都符合预期,微软真是给力,web版IDE和服务器都白送
    golang 在线运行,云原生,golang,github,云计算
  • 用top命令查看资源情况,发现是2核4G的服务器资源
    golang 在线运行,云原生,golang,github,云计算
  • 其实微软还算慷慨,免费资源最多给到了4核8G,咱们回到仓库页面去调整一下,如下图
    golang 在线运行,云原生,golang,github,云计算
  • 如下图修改配置,并使其立即生效
    golang 在线运行,云原生,golang,github,云计算
  • 至此,环境准备好了,咱们来写代码验证一下

设置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到一个公网地址,点击红色箭头的图标,用浏览器访问这个地址
    golang 在线运行,云原生,golang,github,云计算
  • 能够收到body响应,证明刚才的代码已经生效了,至此云端的IDE和运行环境都验证通过
    golang 在线运行,云原生,golang,github,云计算
  • 至此,云端开发运行基本的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镜像下载得飞快
    golang 在线运行,云原生,golang,github,云计算
  • 进入容器
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
    golang 在线运行,云原生,golang,github,云计算
  • 浏览器成返回新增记录的id
    golang 在线运行,云原生,golang,github,云计算
  • 登录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,而编译运行还在之前的云环境进行,既解决了习惯问题,又不影响白嫖微软服务器,依旧是快乐满满,具体操作方法如下,点击红色箭头所指的菜单
    golang 在线运行,云原生,golang,github,云计算

  • 此时浏览器就会拉起本地vscode
    golang 在线运行,云原生,golang,github,云计算

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

  • 一切都符合预期,可见微软诚不欺我,4核8G服务器资源免费用,诚意满满

  • 这下似乎找不到偷懒的理由了,电脑破没关系,不想安装设置也没关系,没有服务器也没关系,GitHub都为你准备好了,还有什么理由不静下心来认真学习呢?

  • 了解更多codespaces详情,请访问官方资料:https://docs.github.com/zh/codespaces/overview文章来源地址https://www.toymoban.com/news/detail-783838.html

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

到了这里,关于云端golang开发,无需本地配置,能上网就能开发和运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网云智能开发—MosQuitto服务器的安装 测试 订阅&发布及加密教程

    官方介绍 Eclipse Mosquitto是一个开放源码(EPL/EDL许可)消息代理,它实现了MQTT协议版本5.0、3.1.1和3.1。mosquitto是轻量级的,适用于所有设备,从低功率单板计算机到全服务器。MQTT协议提供了使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,如低功

    2024年04月28日
    浏览(28)
  • 无需多人协作开发时 只在本地使用git,无需git push到远程仓库

    1.以下部分先介绍的是git在本地的使用。当不涉及到多人协作,只是想要一个工具记录每一次的提交和修改,能轻松还原到某个版本,git已经可以满足这些功能了。 2.只有当涉及到多人协作时,gitlab和github等web仓库才更好的派上用场。 git add 提交至暂存区 git commit 提交至版本

    2024年02月15日
    浏览(45)
  • 部署ChatGPT(在VPS或免费容器上),无需科学上网!

    前提 已经注册了openAI ,或者有openAI 的 API key【 点击获取 】 SSH远程连接工具 方案一(VPS) 需要一台VPS,可以点击【 获取VPS 】 用SSH远程连接工具连接VPS后,安装 Docker,命令如下: 搭建ChatGPT 【开源项目】,命令如下: (其中的“Your key”是openAI 的 API key) 安装后,直接访问

    2023年04月09日
    浏览(30)
  • AI国漫女神这样画!傻瓜式的云端SD(stable diffusion)部署教程 - 白嫖4090、无需代码、一键启动

    前段时间一直在用midjourney进行Ai绘画,但是发现Midjourney绘画的限制有点多很死板,很多图都不能画,懂得都懂。想使用Midjourney可以看这个:( 【推荐】Midjourney订阅教程 ) 然后就转到心仪已久的SD(stable diffsion),它的优点很明显 目前源代码在github开源,简称免费; 自定义

    2024年03月15日
    浏览(45)
  • midjourney国内版上线! 无需科学上网即可体验midjourney的强大功能

    最近大火的 midjourney 国内版上线了!该网站对接了 midjourneyAPI ,以文生图、以图生图功能都支持,可以无需注册及科学上网即可以使用 midjourney 的功能,下面我们来体验一下它的功能。 网址:https://www.magicaibot.com/talk 人像: 卡通(cartoon) 和 高保真(high details)全身人像 以下引用

    2024年02月10日
    浏览(28)
  • golang无需创建新切片

    在 Go 语言中,`append(b, 0)[:len(b)]` 是一种常见的用法,用于在切片 `b` 后追加一个元素,并返回旧切片的前 `len(b)` 个元素。 这种用法的目的是将一个新元素追加到切片中,并确保切片的长度保持不变。具体步骤如下: 1. `append(b, 0)`:通过 `append` 函数将元素 `0` 追加到切片 `b`

    2024年02月11日
    浏览(26)
  • Obsidian 从本地到云端

    原文: https://www.ftls.xyz/posts/obcsapi-fc-simple/ 作者:恐咖兵糖 Obsidian 作为本地笔记软件,在使用了多端同步插件 remotely save插件情况下,我选 s3 同步。如果能够在微信测试号中,信息发送过去,然后存储到对象存储中。在 Obsidian 中一刷新就能看到了。于是就有了Obsidian S3 存储的

    2024年02月19日
    浏览(73)
  • 本地数据库迁移到云端服务器

    工具迁移xtrabackup 创建云服务器——通过云服务器提供的公网地址远程连接XShell——利用迁移工具将数据库从本地迁移到云服务器 ①本地数据库安装xtrabackup --target-dir表示备份文件存放的目录 ②备份本地数据库 ③桌面作为中介接收、上传数据库 ①将数据库文件上传到云服务

    2024年04月25日
    浏览(33)
  • 从本地到云端:豆瓣统一的数据存储实践

    豆瓣成立于 2005 年,是中国最早的社交网站之一。在 2009 到 2019 的十年间,豆瓣数据平台经历了几轮变迁,形成了 DPark + Mesos + MooseFS 的架构。 由机房全面上云的过程中,原有这套架构并不能很好的利用云的特性,豆瓣需要做一次全面的重新选型,既要考虑未来十年的发展趋

    2024年02月03日
    浏览(37)
  • 数据放在云端和本地数据中心哪个安全?

    大数据时代,数据一定是最重要的。随着云计算技术和平台的广泛应用,开始有越来越多的用户挑选把数据存储在云平台上。那么关于用户来说,数据存放在云端更安全些,仍是放在本地的数据中心机房呢? 公有云平台里的数据 不管是对于企业还是用户而言,挑选一个大的公

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包