雲端golang開發,無需本地配置,能上網就能開發和運行

来源:https://www.cnblogs.com/bolingcavalry/archive/2023/10/27/17724761.html
-Advertisement-
Play Games

不想裝golang,不想裝IDE,還想有個流暢的運行環境,最重要的是一分錢都不想花,嗯嗯,GitHub雲開發環境全部滿足你,一切操作盡在本文 ...


歡迎訪問我的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雲開發環境配置
    在這裡插入圖片描述
  • 註意上面的內容,共有兩個配置項
  1. 部署了go1.18版本,您可以根據自己的需要修改,我這改成了1.19
  2. 安裝了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

歡迎關註博客園:程式員欣宸

學習路上,你不孤單,欣宸原創一路相伴...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Hutool它是一個Java工具集類庫,包含了很多靜態方法的封裝:流處理、時間日期處理、正則處理、加解密處理、文件處理、集合處理等,可以說是項目中幾乎所有XxxxUtil的替代品,它可以使你更多的關註代碼邏輯,優雅的寫出高效代碼,避免“複製粘貼,改改再戰”。 ...
  • 函數 (1)函數的定義 函數使用func進行定義 函數是基本的代碼塊,用於執行一個任務 Go語言至少有一個main函數 函數聲明告訴了編譯器函數的名稱,返回類型和參數 //1.無參數無返回值函數的定義 func test1(){ fmt.Println("無參數無返回值函數的定義\n") } //2 ...
  • 作者:hinotoyk 鏈接:https://juejin.cn/post/6910215219822362632 背景:某日在公司中擼代碼的時候,在一個常用的controller中添加一個方法,測試時突然報錯說註入的service為null,搗鼓一陣發現後是方法修飾符寫成private,修改成pu ...
  • BeautifulSoup庫用於從HTML或XML文件中提取數據。它可以自動將複雜的HTML文檔轉換為樹形結構,並提供簡單的方法來搜索文檔中的節點,使得我們可以輕鬆地遍歷和修改HTML文檔的內容。廣泛用於Web爬蟲和數據抽取應用程式中。 ...
  • `Shiro`許可權框架認證失敗預設是重定向頁面的,這對於前後端分離的項目及其不友好,可能會造成請求404的問題。現在我們自定義過濾器實現認證失敗返回json數據。 ...
  • 1 引言 小團隊一般 10 人左右,其中常常是技術最牛的人做架構師(或TL)。所以,架構師在廣大碼農中的占比大概平均不到 10%。而架構師也可以分為初級、中級、高級三檔,江湖上真正高水平的軟體架構師就更少了。 所以,大部分(超過九成的)碼農幹上許多年,還是做不了架構師,這是什麼原因造成的呢? 2 說 ...
  • 我們都知道java中,如果char類型和int類型做加減法,那麼char類型會被精度提升至int類型然後參與運算,返回的也是int類型的數據。 那麼如果表達式中參與運算的均為char類型,那麼表達式返回的類型是什麼呢? 'A' - 'a' 經過簡單測試,是int類型。 char c = 'w'; s ...
  • 雷達圖(Radar Chart),也被稱為蛛網圖或星型圖,是一種用於可視化多個變數之間關係的圖表形式。雷達圖是一種顯示多變數數據的圖形方法。通常從同一中心點開始等角度間隔地射出三個以上的軸,每個軸代表一個定量變數,各軸上的點依次連接成線或幾何圖形。 雷達圖可以用來在變數間進行對比,或者查看變數中有沒 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...