「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」
介绍
使用Docker开发Golang云原生应用程序,使用Golang服务和Redis服务
注:写得很详细 为方便我的朋友可以看懂
环境部署
确保已经安装Go、docker等基础配置
官网下载链接直达:Docker官网下载 Go官网下载
操作步骤
第一步 创建一个Go应用程序
- 创建新Go工程,编辑main.go文件内容如下:
package mainimport ("context""fmt""github.com/go-redis/redis/v8""log""net/http"
)var ctx = context.Background() //创建一个context---用于redis操作func main() {// 第一步 设置Redis客户端client := redis.NewClient(&redis.Options{Addr: "localhost:6379", // 使用Docker服务名作为地址})//1 redis.NewClient()初始化一个新的redis客户端实例(客户端可以执行对redis各种操作)//在创建一个数据库连接时,其实是创建了一个数据库客户端实例//2 &redis.Options{}是一个结构体(包含创建redis客户端时配置信息)//3 Addr:“redis:6379” 设置redis服务端的地址(redis--服务器名/ip地址;6379--redis服务默认端口)// 第二步 确认 是否与 Redis 连接成功_, err := client.Ping(ctx).Result() //客户端 发送P ing 到服务端-->检测客户端是否与 Redis服务器 建立连接if err != nil {log.Fatalf("Could not connect to Redis: %v", err) //记录err并终止程序}//.Result() 获取Ping后的响应和错误// 第三步 1 设置HTTP服务器http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {//尝试从Redis获取值val, err := client.Get(ctx, "counter").Result() //查键counter(val:获取到的值value)//(1)无查到key(redis.Nil--特殊错误:键不存在)if err == redis.Nil {//增键counterval = "0" //无计数器的值--设置为0_, err := client.Set(ctx, "counter", "1", 0).Result() //增键counter (最后参数0:表示键不会过期)if err != nil {fmt.Fprintf(w, "Error setting value in Redis: %v", err) //错误信息写入http响应//w:HTTP响应写入器(向客户端发送响应数据) %v 格式化占位符:表示errreturn //终止函数,不再向下执行}//(2)发生错误} else if err != nil {fmt.Fprintf(w, "Error getting value from Redis: %v", err)return} else {// (3)查到key,value++newVal, err := client.Incr(ctx, "counter").Result()if err != nil { //添加计数器发生错误时fmt.Fprintf(w, "Error incrementing value in Redis: %v", err)return}val = fmt.Sprintf("%d", newVal) //更新计数器的值}fmt.Fprintf(w, "Counter value is: %s", val)})// 启动HTTP服务器log.Fatal(http.ListenAndServe(":8082", nil))
}
第二步 使用Docker编排Go应用程序和Redis服务
-
创建
Dockerfile文件(无文件后缀名)如图:

-
然后编辑该文件:
FROM golang:1.16WORKDIR /appCOPY go.mod .
COPY go.sum .
RUN go mod downloadCOPY *.go .RUN go build -o /hello-redisEXPOSE 8080CMD [ "/hello-redis" ]
第三步 初始化Go模块
继续在Terminal编辑(确保还是在这个go程序的路径):
go mod init hello-redis
go mod tidy
第四步 创建并编辑docker-compose.yml文件
在文件夹下创建文件,添加内容如下:
version: '3' #docker compose的版本号#定义要运行的服务
services:#自定义应用服务app: #定义名为app的服务build: . #构建Dockerfile (使用 . 当前目录下的Dockerfile文件)ports:- "8082:8082" # 映射端口: 容器8082端口---映射-->宿主机8082端口depends_on:- redis # 依赖redis服务redis:image: "redis:alpine"#使用redis的alpine镜像
第五步 构建和运行应用程序
继续在Terminal上输入代码:
docker-compose up --build
此时将会试图构建Go应用程序和Redis服务,并启动它们,在这个过程中需要等待Docker下载相应的依赖配置。
第六步 测试应用程序
使用curl访问http://localhost:8082
输入代码:
curl http://localhost:8080
这个时候会打开浏览器并访问http://localhost:8080,页面上会显示计数值
附录
比较快一点的编辑文件的方法就是使用Terminal
具体的步骤如下:(一个小案例:创建Dockerfile文件并编辑)
1. 切换到工作目录
在工作目录上右击打开Terminal

或者直接打开Terminal 然后输入代码切换到工作目录
cd Go应用程序的路径

忘记路径的时候 如何查看Go应用程序的工作路径
右击go文件夹,点击get info

以下信息就是go文件夹的位置

2. 创建文件
输入代码:
vim Dockerfile
3. 编辑文件,保存并退出
复制粘贴前文代码

复制粘贴好之后,直接输入代码,回车即可退出:
注意一定要是英文输入法
:wq!

相关文章:
「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」
介绍 使用Docker开发Golang云原生应用程序,使用Golang服务和Redis服务 注:写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达:Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…...
Vue环境的搭建
1.Vue开发的两种方式 (1)核心包传统开发模式 基于html/css/js文件,直接引入,开发Vue。 (2)工程化开发模式(更常用的一种): 主要是基于构建工具(例如,webp…...
在Spring Boot中实现单文件,多文件上传
这篇文章算是一篇水文,因为也没啥好讲的,在Spring Boot中,上传文件是我们常常做的,包括我们在实际开发过程中,我们也经常碰到与文件上传有关的功能,这也算是我们常用的一个功能了,毕竟作为开发者…...
如何在 Web 应用程序中查找端点?
如何在 Web 应用程序中查找端点? 这篇文章主要讲述了如何在网络应用中找到端点。以下是文章的主要要点: 端点是网络服务的访问地址,通过引用这个URL,客户可以访问服务提供的操作。端点提供了寻址Web服务端点所需的信息。 HTTP消息是服务器和客户端之间交换数据的方式,包…...
使用el-scrollbar实现定位滚动,以及el-scrollbar去掉横向滚动条
实现滚动 <el-scrollbar ref"scroll" style"height: 100%;">// ... </el-scrollbar>可以使用如下属性: 想要滚动到哪个指定位置,自己获取或计算 this.$refs[scroll].wrap.scrollTop 0 //想滚到哪个高度,…...
AOP + 自定义注解实现日志打印
1. 先定义个注解,让它作用于方法上 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface Loggable {}2. 定义切面 Aspect Component Slf4j public class LogMethodCallAspect {Pointcut("annotation(com.wy.spring_demo.aop.…...
美团YOLOv6量化部署实战方案
文章目录 1. 背景和难点2. 量化方案实战2.1 重参数化优化器2.1.1 RepOpt2.1.2 RepOpt 版本的 PTQ2.1.3 RepOpt 版本的 QAT2.2 基于量化敏感度分析的部分量化2.3 基于通道蒸馏的量化感知训练2.3.1 通道蒸馏2.3.2 YOLOv6 量化感知蒸馏框架3. 部署时优化3.1 图优化3.1.1 性能分析3…...
hive杂谈
数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。 数据仓库的主要特征是:主题性、集成性、非易失性、时变性。 数据仓库的体系结构通常包含4个层次ÿ…...
c语言实现简单的string
文章目录 前言一、注意事项二、代码valgrind扫描总结 前言 在c语言中利用面向对象的编程方式,实现类似c中的string类。 一、注意事项 所有与string结构体相关的函数全都没有返回值。 在c中,当产生临时对象时编译器会自动的加入析构函数,销毁…...
老师应具备什么样的心理素质
老师,一个充满智慧与挑战的职业,就像园丁,用无私的爱和耐心,滋养着每一颗渴望知识的幼苗。那么,作为教育从业者,要具备哪些心理素质呢? 强大的情绪管理能力 老师的工作绝非一帆风顺。在教育学生…...
C语言——单链表(增删改查)
C语言——单链表(增删改查) 一链表一 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct Test {int data;struct Test *next; }Link;Link *headNULL;Link* creatHead(Link* head); void AddLinkNode(Link* head,Link newnode); vo…...
Jenkins 保姆级教程
一、什么是流水线 jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语法中,流水线过程定…...
基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试(1)
基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试(1) 进行了多组实验,包括顺逆时针转向,直线圆弧轨迹行驶,以及Pure-Pursuit 轨迹跟踪测试 代码修改 需要修改的代码并不多,主要对 gps_sensor 功能包和…...
4.25每日一题(通过被积函数和积分区域(不等式)选正确的坐标系求二重积分)
一、正确画出积分区域;通过积分区域和被积函数选择方法 二、如何根据被积函数和积分区域正确选择通过极坐标还是根据直角坐标方程计算: (1)适合极坐标的积分区域:圆或者部分圆 (2)适合极坐标的…...
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)
套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型:1.1.2接口设计:1.1.3数据库设计: 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …...
Visual NLP:图像信息自动提取的未来
本文旨在以简单的方式解释 Visual NLP 的关键概念,让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…...
力扣118双周赛
第 118 场双周赛 文章目录 第 118 场双周赛查找包含给定字符的单词最大化网格图中正方形空洞的面积购买水果需要的最少金币数找到最大非递减数组的长度 查找包含给定字符的单词 模拟 class Solution { public:vector<int> findWordsContaining(vector<string>&am…...
网络编程基本概念
网络编程基本概念 为什么需要网络编程? 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相…...
Flutter模板
简介 这个项目是Flutter应用程序的起点。与创建的官方默认模板相比,该项目实现了状态管理等功能,用于Url、本地化等的Navigator 2.0路由。 开始 该项目的入口文件为 ‘lib/init/init.dart’ 特性 状态管理 基于provider. Navigator 2.0适配 代码…...
坐标变换(其一)CSP
坐标变换(其一) 问题描述 对于平面直角坐标系上的坐标 (x,y),小 P 定义了一个包含 n 个操作的序列 T(t1,t2,⋯,tn)。其中每个操作 ti(1≤i≤n)包含两个参数 dxi 和 dyi,表示将坐标 (x,y) 平移至 (xdxi,yd…...
从零到一:ResNet18在CIFAR-10上的实战调优与避坑指南
1. 环境准备:从零搭建深度学习开发环境 第一次接触深度学习时,最让人头疼的就是环境配置。记得我刚开始用Windows电脑跑ResNet18时,光是安装Anaconda就折腾了大半天。这里分享几个真实踩坑后总结的经验,帮你避开那些新手必踩的雷区…...
不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico酉
1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...
PRoot:无需root权限的Linux环境容器化神器
PRoot:无需root权限的Linux环境容器化神器 【免费下载链接】proot An chroot-like implementation using ptrace. 项目地址: https://gitcode.com/gh_mirrors/pro/proot PRoot是一款革命性的开源工具,能在无需root权限的情况下为普通用户提供类似…...
程序员相亲指南:软件测试从业者的高光自我介绍术
当“软件测试工程师”遇上“相亲局”,如何用三句话破除“点按钮的”“找bug的”刻板印象?本文从专业视角拆解表达策略,助你展现职业价值与人格魅力。一、困境篇:软件测试相亲的三大认知陷阱1. 致命三连问的杀伤力场景还原…...
解决SQL Server导入导出向导中“Microsoft.ACE.OLEDB.12.0”提供程序未注册问题
1. 问题现象与原因分析 当你使用SQL Server的导入导出向导处理Excel文件时,突然弹出一个让人头疼的错误提示:"未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序"。这个错误我遇到过不下十次,每次帮同事处理这个问题都要解释一…...
毕业季求生指南:如何用AI告别论文写作的“至暗时刻”?
凌晨三点的图书馆,咖啡杯堆成小山,屏幕前双眼通红的你还在为第三章的实验数据发愁——这或许是许多人学生时代最深刻的记忆。而今天,一个名叫“百考通AI”的工具正在悄然改变这一切。 深夜十二点,计算机专业的李明仍在实验室里对着…...
3分钟上手Nebula Console:图数据库管理的终极命令行工具指南 [特殊字符]
3分钟上手Nebula Console:图数据库管理的终极命令行工具指南 🚀 【免费下载链接】nebula-console Command line interface for the Nebula Graph service 项目地址: https://gitcode.com/gh_mirrors/ne/nebula-console Nebula Console是NebulaGra…...
YOLOv13新手教程:从镜像启动到完成预测,手把手教学
YOLOv13新手教程:从镜像启动到完成预测,手把手教学 1. 环境准备与快速部署 1.1 镜像获取与启动 YOLOv13官版镜像已经预装了所有必要的运行环境和依赖库,包括Python 3.11、PyTorch 2.3以及Flash Attention v2加速库。你只需要简单的几步就能…...
BallonTranslator:免费开源的一键漫画翻译神器
BallonTranslator:免费开源的一键漫画翻译神器 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https://gitco…...
手机号码定位系统:3分钟实现精准地理位置查询的终极指南
手机号码定位系统:3分钟实现精准地理位置查询的终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mi…...
