当前位置: 首页 > news >正文

Goland如何玩依赖注入——基于gone@v2创建一个service

经过多天的工作,终于把gone2的beta版本发布出去了。在v2版本中,做了很多更新,最大的改进是将一些不必要的概念给隐藏起来了,提供了Provider机制……

文章目录

    • 1. 安装**gonectr**
    • 2.创建项目
      • 2.1 项目结构
    • 2.2 简单说明
    • 3. 启动项目
      • 3.1 数据库
      • 3.2 本地开发启动
      • 3.3 服务部署

1. 安装gonectr

go install github.com/gone-io/gonectr@latest
gonectr -v
Gonectr version: v0.0.17

版本应该大于:v0.0.17

2.创建项目

gonectr create -t v2+web+mysql demo

在这里插入图片描述
项目是以https://github.com/gone-io/template-v2-web-mysql 为模板创建的。

2.1 项目结构

├── go.mod
├── go.sum
├── Dockerfile
├── docker-compose.yaml
├── Makefile
├── README.md
├── cmd
│   └── server
│       ├── import.gone.go
│       └── main.go
├── config
│   └── default.properties
├── internal
│   ├── controller
│   │   ├── init.gone.go
│   │   └── user.go
│   ├── interface
│   │   ├── entity
│   │   │   └── user.go
│   │   ├── mock
│   │   │   ├── i_depenendent.gone.go
│   │   │   ├── i_user.gone.go
│   │   │   ├── i_user_token.gone.go
│   │   │   └── priest.gone.go
│   │   ├── package.go
│   │   └── service
│   │       ├── i_depenendent.go
│   │       ├── i_user.go
│   │       └── i_user_token.go
│   ├── loader.go
│   ├── module
│   │   ├── dependent
│   │   │   ├── dependent.go
│   │   │   └── init.gone.go
│   │   └── user
│   │       ├── init.gone.go
│   │       ├── token.go
│   │       ├── user.go
│   │       └── user_test.go
│   ├── pkg
│   │   ├── e
│   │   │   └── error.go
│   │   └── utils
│   │       ├── ctx.go
│   │       ├── password.go
│   │       └── token.go
│   └── router
│       ├── auth_router.go
│       ├── init.gone.go
│       └── pub_router.go
├── scripts
│   └── mysql
│       └── initdb.d
│           └── user.sql
└── tests└── api├── http-client.env.json└── user.http

2.2 简单说明

  • cmd/server/main.go 是服务的入口文件:
package mainimport ("demo/internal""github.com/gone-io/gone/v2"
)func main() {gone.Loads(internal.Load).Serve()
}
  • config 是配置文件目录,支持多种配置文件格式,包括:JSON, TOML, YAML, HCL, INI, envfile or Java properties,配置文件的读取的底层是使用viper实现的。
  • internal 是业务代码目录,包括webController、 业务接口定义 和 业务逻辑实现等
    • internal/router 路由分组
    • internal/controller web接口定义
    • internal/interface 业务接口定义
    • internal/module 业务逻辑实现
  • scripts 项目脚本
  • tests 接口测试的http文件,可以直接使用goland打开
    在这里插入图片描述

3. 启动项目

3.1 数据库

该项目使用的mysql数据库,需要:

  1. 创建数据库,然后导入位于 scripts/mysql/initdb.d/user.sql的SQL文件
  2. 按实际情况修改配置文件config/properties
# 使用mysql
database.driver-name=mysqldb.host=localhost
db.port=3306
db.name=demo
db.username=root
db.password=123456# 数据源配置 配置中,使用${key}来引用配置文件中的值
database.dsn=${db.username}:${db.password}@tcp(${db.host}:${db.port})/${db.name}?charset=utf8mb4&loc=Local

如果本地安装了docker-desktop,只需要执行:

docker compose up -d mysql

3.2 本地开发启动

首先,下载依赖:

go mod tidy

有多种方式:

  • 1. 使用gonectr来启动项目:
gonectr run ./cmd/server

会看到屏幕打印内容如下:
在这里插入图片描述

  • 2. 使用go run命令来启动
    **但是请注意,需要先执行go generate ./...来生成辅助代码,这些辅助代码包含用于将 组件(Goner)注册到框架和用于mock测试。
go generate ./...
go run ./cmd/server
  • 3. 使用goland
    点开Edit Configurations,可以已经默认添加了一个启动项,并且在Before launch配置 了 go generate ./...,所以直接点击”运行“就可以了。
    在这里插入图片描述
    在这里插入图片描述
  • 3. 使用vs code
    在vscode中已经配置了启动项和启动前的任务,所以侧边栏切换到"运行和调试"点击 运行即可。
  • .vscode/launch.json
{"version": "0.2.0","configurations": [{"name": "server","type": "go","request": "launch","mode": "auto","cwd": "${workspaceFolder}","program": "${workspaceFolder}/cmd/server","preLaunchTask": "generate"}]
}
  • .vscode/tasks.json
{"version": "2.0.0","tasks": [{"label": "generate","type": "shell","command": "go generate ./...","problemMatcher": []}]
}

在这里插入图片描述

3.3 服务部署

项目同时提供了docker-compose.yaml 和 Dockerfile,方便生成镜像部署到服务器上。

相关文章:

Goland如何玩依赖注入——基于gone@v2创建一个service

经过多天的工作,终于把gone2的beta版本发布出去了。在v2版本中,做了很多更新,最大的改进是将一些不必要的概念给隐藏起来了,提供了Provider机制…… 文章目录 1. 安装**gonectr**2.创建项目2.1 项目结构 2.2 简单说明3. 启动项目…...

rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64

在我在Linux中安装离线CAN工具时,出现了一个问题, rootwanghuo:~# rpm -ivh can-uilts-v2019.00.0-alt1.aarch64.rpm error: Failed dependencies:rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64 意思是尝试安装 can-uilts-v20…...

处理Java中的异常

处理Java中的异常 在 Java 中,异常处理是通过 try-catch-finally 语句来实现的。Java 提供了一种强大的机制,用于捕捉和处理程序运行中的各种错误和异常。通过这种方式,你可以有效地捕捉到可能导致程序崩溃的错误,并做出相应的处…...

mac 苍穹外卖 前端环境配置

博主的 mac 是 m2。 结合以下两篇,成功配置前端环境。 macOS 配置苍穹外卖前端环境_macbook怎么nginx下载外卖-CSDN博客 苍穹外卖-Mac配置前端开发环境_sudo 启动 nginx 有什么区别-CSDN博客 一、安装nginx 我使用的是 homebrew,homebrew 的安装请自…...

前端系统测试(单元、集成、数据|性能|回归)

有关前端测试的面试题 系统测试 首先,功能测试部分。根据资料,单元测试是验证最小可测试单元的正确性,比如函数或组件。都提到了单元测试的重要性,强调其在开发早期发现问题,并通过自动化提高效率。需要整合我搜索到的资料中的观点,比如单元测试的方法(接口测试、路径覆…...

Python:函数式编程

函数式编程(Functional Programming, FP)是一种编程范式,强调通过纯函数、不可变数据和声明式风格来构建程序。Python 虽然不是纯函数式语言,但提供了丰富的函数式编程工具。(简单来说是,函数约等于模块功能&#xff0…...

Spring Boot中@Valid 与 @Validated 注解的详解

Spring Boot中Valid 与 Validated 注解的详解 引言 在Spring Boot应用中,参数校验是确保数据完整性和一致性的重要手段。Valid和Validated注解是Spring Boot中用于参数校验的两个核心注解。本文将详细介绍这两个注解的用法、区别以及代码样例。 Valid注解 功能介…...

[动手学习深度学习]12.权重衰退

1.介绍 权重衰退是常见的处理过拟合的方法 控制模型容量方法 把模型控制的比较小,即里面参数比较少使参数选择范围小 约束就是正则项 每个特征的权重都大会导致模型复杂,从而导致过拟合。 控制权重矩阵范数可以使得减少一些特征的权重,甚至…...

JVM内存结构笔记04-字符串常量池

文章目录 定义字符串常量池的位置JDK 1.7 为什么要将字符串常量池移动到堆中? StringTable案例1案例2案例3 String.intern()案例4案例5案例6总结 StringTable 垃圾回收案例1.创建100个字符串(不会触发垃圾回收)2.创建10000个字符串(触发垃圾回收) StringTable 性能调…...

STM32 HAL库实战:高效整合DMA与ADC开发指南

STM32 HAL库实战:高效整合DMA与ADC开发指南 一、DMA与ADC基础介绍 1. DMA:解放CPU的“数据搬运工” DMA(Direct Memory Access) 是STM32中用于在外设与内存之间直接传输数据的硬件模块。其核心优势在于无需CPU干预,…...

c语言闯算法--常用技巧

双指针 类别&#xff1a; 同向快慢指针 异常情况&#xff0c;慢指针才动 双向指针 视情况&#xff0c;左右指针动 最长无重复子串 int max(int a, int b){if(a < b){return b;}else{return a;} } int lengthOfLongestSubstring(char* s) {int count[300];for(int i 0; i …...

docker启动jenkins,jenkins中调用docker

在jenkins中执行docker 思路 jenkins中安装docker客户端&#xff0c;使用第三方的docker(需要付费)。jenkins中安装docker客户端&#xff0c;另一个容器中安装docker服务&#xff0c; docker-in-docker&#xff0c;需要特权模式&#xff0c;或者第三方的工具。jenkins中什么都…...

【设计模式】设计模式介绍

一、设计模式概述 设计模式分很多种&#xff0c;每种一般都用于解决某个软件开发过程中的问题。许多人认为设 计模式有23种&#xff0c;其实&#xff0c;对于这个数字也没必要那么教条&#xff0c;当然还有更多的设计模式种类&#xff0c;只 不过是这23种比较经典而已。甚至可…...

图形学面试题总结

图形学面试题总结 文章目录 图形学面试题总结Opengl 与 Vulkan1、OpenGL的渲染管线有哪些主要阶段&#xff1f;分别做什么&#xff1f;2、OpenGL中的VAO、VBO和EBO分别是什么&#xff1f;为什么需要它们&#xff1f;3、细分着色器与几何着色器是什么4、Vulkan与Opengl的区别是什…...

Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护

1.1 Sentinel 作用 Sentinel 是阿里巴巴开源的一款 流量控制和熔断降级 框架&#xff0c;主要用于&#xff1a; 流量控制&#xff1a;限制 QPS&#xff0c;防止流量暴增导致系统崩溃熔断降级&#xff1a;当某个服务不可用时自动降级&#xff0c;避免故障扩散热点参数限流&…...

Comfyui 与 SDwebui

ComfyUI和SD WebUI是基于Stable Diffusion模型的两种不同用户界面工具&#xff0c;它们在功能、用户体验和适用场景上各有优劣。 1. 功能与灵活性 ComfyUI&#xff1a;ComfyUI以其节点式工作流设计为核心&#xff0c;强调用户自定义和灵活性。用户可以通过连接不同的模块&…...

面试之《前端常见的设计模式》

前端开发中运用多种设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是一些常见的前端设计模式&#xff1a; 创建型模式 1. 单例模式 定义&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。应用场景&#xff1a;在前端中&#xff0c;像全局状…...

PostgreSQL异常:An IO error occurred while sending to the backend

在使用PostgreSQL数据库批量写入数据的时候&#xff0c;遇到了一个问题&#xff0c;异常内容如下&#xff1a; Cause: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.报错内容 报错提示1 Caused by: org.postgresql.util.PSQLExc…...

嵌入式八股C语言---面向对象篇

面向对象与面向过程 面向过程 就是把整个业务逻辑分成多个步骤,每步或每一个功能都可以使用一个函数来实现面向对象 对象是类的实例化,此时一个类就内部有属性和相应的方法 封装 在C语言里实现封装就是实现一个结构体,里面包括的成员变量和函数指针,然后在构造函数中,为结构体…...

一周学会Flask3 Python Web开发-使用SQLAlchemy动态创建数据库表

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们定义了模型&#xff0c;我们可以通过sqlalchemy对象提供的create_all()方法来映射和动态创建数据库表。 因为我们用到…...

【spring】springAOP

1.基本概念 AOP即面向切面编程&#xff0c;它利用的是一种横切技术&#xff0c;解剖开封装的对象内部&#xff0c;并将那些影响多个类的公共行为封装到一个可重 用模块&#xff0c;这就是所谓的Aspect方面/切面。所谓的切面&#xff0c;简单点所说&#xff0c;就是将哪些与业务…...

解决VMware虚拟机CentOS 7 忘记登陆密码问题

1. 重启虚拟机&#xff0c;在重启时不停按E键进入初始化脚本编辑界面 2.在初始化脚本编辑界面&#xff0c;按↓键向下拉到最后&#xff0c;找到LANG/zh_CN.UTF-8那里&#xff0c;输入空格&#xff0c;接着添加 "init/bin/sh" 。然后按ctrlX键进入下一步。 3. 在界面中…...

如何在 Windows 10 启用卓越性能模式及不同电源计划对比

在使用 powercfg -duplicatescheme 命令启用 “卓越性能模式”&#xff08;即 Ultimate Performance 模式&#xff09;之前&#xff0c;有几个前提条件需要注意&#xff1a; 前提条件&#xff1a; 系统版本要求&#xff1a;卓越性能模式 仅在 Windows 10 专业版 或更高版本&a…...

基于 GEE 利用 Sentinel-2 数据反演叶绿素与冠层水分含量

目录 1 数据加载与预处理 2 叶绿素含量反演 3 冠层水分反演 4 数据可视化与导出 5 完整代码 6 运行结果 在生态学和环境科学领域&#xff0c;植被的健康状况是评估生态系统稳定性和功能的关键指标之一。而叶绿素含量和冠层水分含量作为反映植被生理状态的重要参数&#x…...

《鸿蒙系统下AI模型训练加速:时间成本的深度剖析与优化策略》

在当今数字化浪潮中&#xff0c;鸿蒙系统凭借其独特的分布式架构与强大的生态潜力&#xff0c;为人工智能的发展注入了新的活力。随着AI应用在鸿蒙系统上的日益普及&#xff0c;如何有效降低模型训练的时间成本&#xff0c;成为了开发者与研究者们亟待攻克的关键课题。这不仅关…...

PyTorch分布式训练

本文结构&#xff1a; 分布式训练概述环境设置数据并行&#xff08;DDP&#xff09;模型并行启动训练性能优化建议示例代码参考资料和相关问题 以下是为您整理的PyTorch分布式训练教程指南&#xff1a; 一、PyTorch分布式训练核心概念 数据并行&#xff1a;通过分割数据集实…...

ubuntu22.04 关于挂在设备为nfts文件格式无法创建软连接的问题

最近遇到情况&#xff0c;解压工程报错&#xff0c;无法创建软连接 但是盘内还有130G空间&#xff0c;明显不是空间问题&#xff0c;查找之后发现是移动硬盘的文件格式是NTFS&#xff0c;在ubuntu上不好兼容&#xff0c;于是报错。 开贴记录解决方案。 1.确定文件格式 使用命…...

C++编程:进阶阶段—4.2对象

目录 4.2 对象特征 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类 4.2.3 拷贝函数调用时机 4.2.4 构造函数调用规则 4.2.5 深拷贝与浅拷贝 4.2.6 初始化列表 4.2.7 类对象作为类成员 4.2.8 静态成员 4.2.9 成员变量和成员函数的存储 4.2.10 this指针 4.2.11 空指针…...

C++跨平台开发环境搭建全指南:工具链选型与性能优化实战

C跨平台开发环境搭建全指南&#xff1a;工具链选型与性能优化实战 目录 开发环境搭建工具链选型性能优化实战常见问题排查 开发环境搭建 操作系统环境准备 Windows# 安装Visual Studio Build Tools choco install visualstudio2022buildtools choco install cmake --instal…...

常见JVM命令

1. java -XX:PrintCommandLineFlags HelloGC 作用&#xff1a;打印 JVM 启动时的命令行参数&#xff0c;包括用户显式设置的参数和 JVM 自动默认设置的参数。用于确认 JVM 实际使用的配置。 2. java -Xmn10M -Xms40M -Xmx60M -XX:PrintCommandLineFlags -XX:PrintGC -XX:Prin…...

C语言实现队列数据结构:思路与代码详解

目录 一、引言 二、整体思路 三、代码模块分析 &#xff08;一&#xff09;头文件包含与宏定义 &#xff08;二&#xff09;数据类型定义 &#xff08;三&#xff09;队列操作函数 1. 队列初始化 2. 队列销毁 3. 入队操作 4. 出队操作 5. 获取队头元素 6…...

【Docker项目实战】使用Docker与Caddy部署BanBan任务管理工具

【Docker项目实战】使用Docker部署BanBan任务管理工具 一、BanBan介绍1.1 BanBan简介1.2 主要特点1.3 使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载BanBan镜像五、…...

AI重构私域增长:从流量收割到终身价值运营的三阶跃迁

私域运营的AI进化论&#xff1a;内容即服务的三个阶段 随着企业微信生态的成熟&#xff0c;私域运营正经历从"流量收割"到"关系养成"的本质转变。在AIGC技术的推动下&#xff0c;2024年私域场景正式进入**"内容即服务"**的价值共创期&#xff1…...

es扩容节点以后写入数据量增加1倍

背景&#xff1a; es扩容一倍的数据节点以后 写入数据量增加1倍 业务反馈业务访问量没增加。 最后定位是监控数据&#xff1a; PUT _cluster/settings {"persistent": {"xpack.monitoring.collection.enabled" : "false"} }这个索引记录的是 节…...

Go本地缓存设计与实现

本地缓存是一个项目中很常见的组件。在很多人的眼中就是一个简单的key-value的map存储即可实现&#xff0c;但实际上&#xff0c;设计一个本地缓存需要考虑的问题远比你想象的多&#xff0c;比如说&#xff0c;本地缓存是将数据存储在内存&#xff0c;若数据量激增突破了内存限…...

04 | 初始化 fastgo 项目仓库

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课&#xff1b;欢迎加入 云原生 AI 实战 星球&#xff0c;12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;&#xff1b;本节课最终…...

Spring中复杂对象的创建方式:FactoryBean、实例工厂与静态工厂全解析

1.反转控制与依赖注入 控制&#xff1a;对于成员变量赋值的控制权 反转控制&#xff1a;把对于成员变量赋值的控制权&#xff0c;从代码中反转(转移)到Spring工厂和配置文件中完成 好处&#xff1a;解耦合 底层实现&#xff1a;工厂设计模式 依赖注入&#xff1a; 注入&#xf…...

异或和之和 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

异或和之和 题目来源 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组 原题链接 蓝桥杯 异或和之和 https://www.lanqiao.cn/problems/3507/learning/ 问题描述 问题分析 要点1:异或运算 概念 异或(Exclusive OR,简称 XOR)是一种数学运算符,常用于逻辑运算与计算机…...

设计模式 一、软件设计原则

一、理解设计原则 1、单一原则 1.1 如何理解单一职责原则&#xff08;SRP&#xff09; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;简称SRP&#xff09;,他要求一个类或模块应该只负责一个特定的功能&#xff0c;这有助于降低类之间的耦合度&#xf…...

修复Electron项目Insecure Content-Security-Policy(内容安全策略CSP)警告的问题

将以下代码粘贴进html的<header>标签内 <metahttp-equiv"Content-Security-Policy"content"default-src self; style-src self unsafe-inline; img-src self data:; "> 解释一下上面代码中的属性含义 default-src self&#xff1a;配置加载策…...

机器人交互系统 部署构建

环境要求 Ubuntu 20.04 或更高版本ROS Noetic 或兼容版本Python 3.8 安装步骤 1. 安装ROS环境&#xff08;如未安装&#xff09; sudo apt update sudo apt install ros-noetic-desktop-full source /opt/ros/noetic/setup.bash2. 创建工作空间并克隆代码 mkdir -p ~/code…...

当AI回答问题时,它的“大脑”里在炒什么菜?

文章目录 1. 拆解订单&#xff1a;AI如何听懂你的“暗号”&#xff1f;2. 调用工具&#xff1a;AI的“万能工具箱”里有什么&#xff1f;3. 知识不够&#xff1f;去“图书馆”现学现卖&#xff01;4. 人类的秘密武器&#xff1a;给AI戴上“镣铐”5. 为什么AI会“胡言乱语”&…...

linux 软件扩展GPU显存

概述 共享内存可以通过 Unified Memory&#xff08;统一内存&#xff09;来实现&#xff0c;它允许 CPU 和 GPU 共享相同的内存地址空间&#xff0c;从而方便数据的传输和访问。 利用该技术可解决家用GPU 机器学习时显存不足的问题 &#xff08;注&#xff1a; 虽然解决了爆显…...

【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 Spring 框架与 RabbitMQ 的整合主要通过 Spring AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;模块实现&#xff0c;提供了便捷的消息队列开发能力。 引…...

DeepSeek本地化部署(DeepSeek+olloma+Dify)

文章目录 概要需要准备的工具Ollama准备内容Docker准备内容Dify准备内容本地访问Dify 概要 提示&#xff1a;本篇文章主要讲述如何部署本地Deepseek私有大模型&#xff0c;使用Windows无显卡环境进行部署 需要准备的工具 Ollama、Docker Desktop 下载地址&#xff1a; Ollama…...

Spring boot3-WebClient远程调用非阻塞、响应式HTTP客户端

来吧&#xff0c;会用就行具体理论不讨论 1、首先pom.xml引入webflux依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 别问为什么因为是响应式....…...

Ubuntu22.04安装数据

数据库安装步骤&#xff1a; sudo apt-get update sudo apt install mysql-server mysql-client sudo systemctl start mysql sudo systemctl status mysql &#xff08;1&#xff09;在命令行登录 MySQL 数据库&#xff0c;并使用 mysql 数据库 &#xff08;必须使用这个…...

【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动

目录 一、前期准备 1.1 插入设备 1.2 安装atx-agent 二、解决报错&#xff1a;无法提供服务&#xff0c;非am instrument启动 2.1 出现报错 2.2 尝试解决 2.3 最终解决 三、开启ATX的悬浮窗权限 一、前期准备 1.1 插入设备 本地插入待执行设备&#xff0c;待执行设备…...

自动化测试介绍及学习路线

目录 一、自动化测试 1.1 自动化测试的概念 1.2 自动化测试的主流领域 接口自动化测试 UI自动化测试 持续集成 二、学习路线 一、自动化测试 1.1 自动化测试的概念 自动化测试是指利用软件工具或脚本来执行测试用例和比较实际结果与预期结果的过程&#xff0c;通过运行…...

Python:函数(一)

python函数相关的知识点 1. 函数定义与调用 定义&#xff1a;使用 def 关键字&#xff0c;后接函数名和参数列表。 def greet(name):"""打印问候语&#xff08;文档字符串&#xff09;"""print(f"Hello, {name}!") 调用&#xff1a…...