Gin 入门笔记(六)自定义控制器和控制器的继承
自定义控制器 在对路由分组后,我们对控制器也可以进行分组 首先新建controllers文件夹,然后在其中按业务逻辑创建控制器 12345678910111213141516171819TEST│ go.mod│ go.sum│ main.go│├─controllers│ ├─admin│ │ adminController.go│ ││ ├─api│ │ apiController.go│ ││ └─homePage│ homePageController.go //因为default是关键字│└─routers adminRouters.go apiRouters.go defaultRouters.go 以/controllers/admin/adminController.go为例,编辑控制器 123456789101112131415161718package adminimport "github.com/gin-gonic/gin"type AdminController struct {}func (c AdminController) Index(con *gin.Context) { con.String(200, "后台首页")}func (c AdminController) User(con *gin.Context) { con.String(200, &...
Java 版 Minecraft 加模组开服教程
❤️这几天宿舍4个人一起联机玩 MC 打暮色森林 Mod,特记录本次开服记录, (因为暮色森林的新版本变化不大,最终 Boss 还没有出,还多了一堆 bug,所以决定使用1.12.2版本) 客户端准备 安装 Java 环境 前往Java官网下载并安装,或者点击此链接 客户端统一使用HMCL启动器 首先先将下载源改成官方 在游戏列表中下载安装1.12.2版本和Forge(因为我的 Java 一直没更新,所以就安了个比较旧的 Forge ) 下载并安装 Mod 打开mc百科官网寻找 Mod,这里收录了大量 Mod,真的墙裂推荐 打开Mod页面,以暮色森林为例,点击Mod下载,找到需要的版本并下载,同时记一下运行环境里服务器是不是也需要装 点击文件夹图标,打开mod文件夹,复制进去即可 (另外推荐几个辅助性Mod,可以点击此链接下载) 至此,客户端配置完成,你可以点击导出整合包分享给你的小伙伴了 服务端准备 本人环境:Debian 9.9,Java 1.8.0_322 安装 Java 环境 这里图方便,建议直接apt 12sudo apt updatesudo apt install default-jdk 如果后面你发现 java 报错什么的,大概率是版本的问题,那就要去官网下了 下载 Forge 因Java的跨平台性,我选择先在本地配置好,再打包用FileZilla发送到服务器上,本步骤需保持网络通畅 前往Forge官网下载所需的版本,版本应与客户端的版本相同,页面加载不出来请看这篇 下载后,在命令行中运行,选择安装服务端,并指定安装路径(...
『Linux』Nginx 配置 SSL 证书
申请并下载证书 首先,前往https://freessl.cn/注册账号,根据指示填写域名,点击创建免费的SSL证书 CSR生成选择离线生成 点击生成后,会提示先安装KeyManager,根据指示安装即可 根据指示一直走,可以看见证书已经出现在了KeyManager里,点击导出证书 选择Nginx并导出 打开压缩包,可以看见有两个格式的文件:.crt和.key 配置服务器 现在需要将证书上传至服务器,位置任意,例如我这里放在了/root/ssl 接下来编辑Nginx的配置文件 1sudo nano /etc/nginx/sites-available/default 在server把80端口的那部分改成下面几行 12345#监听 443 端口 (HTTPS用的是443)listen 443 ssl;#添加证书ssl_certificate /root/ssl/www-nickxu-top-0223222924_chain.crt;ssl_certificate_key /root/ssl/www-nickxu-top-0223222924_key.key; 然后再开一个server来处理80端口 123456server { listen 80 default_server; listen [::]:80 default_server; server_name www.nickxu.top; rewrite ^(.*) https://$server_name$1 permanent...
Hexo + Butterfly 建站指南(六)PicGO + Gitee 图床(已废弃)
从2022年3月25日开始,Gitee静止了图片外链访问,所以此方法已废弃,搭建图床请看下一篇 写文章免不了要涉及到图片的问题,本人推荐使用PicGO+Gitee来实现一个免费图床,是真的好用 准备 Gitee 储存库 Gitee可以看作是国内的GitHub,前往官网注册账号 注册完,点击右上角的加号新建仓库,名称任意 记得设置readme文件,并创建master分支 成功创建后,进入你的仓库,在选项卡中找到最右边的管理,再到最底下将其设置为开源 在右上角的头像处找到设置,再在左侧找到私人令牌 起个名字之后,点击提交 记住你的令牌,并好好保管 至此,云端储存库准备完毕 下载和安装 PicGo 首先前往PicGo官网下载 它会导到到GitHub上的该项目的releases页面,在最新版打开Assets列表挑选你的系统下载即可 安装后启动,在插件设置中搜索并安装gitee-uploader 再到图床设置里找到gitee,填入路径,分支和令牌即可 现在,图床准备完毕,每上传一张图片都能自动将链接复制到剪贴板里,直接在typora里粘贴即可
Hexo + Butterfly 建站指南(五)日常写作
前面的内容主要讲了如何搭建这个环境,后面两篇讲解平时是怎么写文章的 文章一律使用markdown文档,后缀名为.md 使用hexo new "文章名称"在source\_posts中创建文件后,就能直接打开开始写作了 但是默认貌似会自动创建一个同名文件夹,那个文件夹没什么用,可以在配置文件中关掉自动创建 Front-matter 每篇文章的开头都有一个Front-matter,用于保存这篇文章的信息,详情请看Butterfly 安裝文檔(二) 主題頁面 一般情况下,我们只需要关注title、date、tags、categories这4个参数 title:文章标题 date:写作时间,还有一个相关参数是updated,但不需要加,编译器会把md文件的修改时间作为更新时间 tags:文章标签,语法为tags: [A,B],这样就为这个文章添加了A,B2个标签 categories:文章分类,语法为categories: [A,B],这表示本文属于A分类下的B子类 另外还有一个参数 sticky ,语法为 sticky: n ,它可以设定置顶文章,而且优先级为 n 在目前的Typora中有bug,在普通模式下书写正文开头几个字会卡到Front-matter里,所以正文的开头只能在源代码模式下写 Markdown 语法 Markdown是一种轻量化标记语言,语法简单,并且上手容易 Markdown编辑器我首推Typora,网上也有很多在线编辑器,可供练习使用 考虑Markdown的语法已经广为人知,所以我折叠此部分以节省空间 Markdown 基...
Hexo + Butterfly 建站指南(四)Twikoo 评论系统
本篇内容主要源于: Twikoo 官方文档 Butterfly 安裝文檔(四) 主題配置-2 更新记录 2022-04-09 更正了一个小错误,增加了图片上传功能教程与更新教程 2022-08-11 根据官网更新了 Vercel 的部署链接,很抱歉今天才发现链接从 dev 分支变成了 main 分支 2022-09-11 因为 Vercel.app 在国内被墙,所以可能需要手动添加一个自己域名,请见『Twikoo』解决 Vercel.app 在国内被墙导致无法使用的问题 毫不夸张地说,Twikoo 是我用过最好的静态博客评论系统 预览效果 除了评论功能,还可以记录文章阅读量 搭建过程包括准备数据库和云函数,还有修改主题配置文件 配置数据库和云函数 墙裂建议观看官方视频教程,我也是看了这个视频才成功的 MongoDB 使用MongoDB数据库来存储数据,先注册 MongoDB 账号 创建免费数据库,类型选择Shared,区域选择 AWS / N. Virginia (us-east-1) (因为我已经创建过一个了,所以图中显示要付费) 点击Connect按钮 键入 0.0.0.0/0 以允许所有 IP 地址的连接,并创建数据库用户(我这里是已经完成了的) 连接方式选择中间的Conne...
Hexo + Butterfly 建站指南(三)Butterfly 主题
本篇内容主要源于: Butterfly 官方安装文档 Hexo+Butterfly主题美化 | 唐先森の博客 安装 在你的博客根目录下载主题并安装依赖: 12git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterflynpm install hexo-renderer-pug hexo-renderer-stylus --save 然后在theme目录可以找到新的butterfly主题(默认主题landscape其实可以删掉了) 在_config.yml中更改主题为butterfly 1theme: butterfly 测试,可以看见新主题已安装 官方配置 在\themes\butterfly中找到主题配置文件_config.yml,复制一个副本出来,重命名为_config.butterfly.yml 在把它剪贴到博客根目录,就跟_config.landscape.yml的格式一样 Hexo 中,根目录下的_config.butterfly.yml会比\themes\butterfly\_config.yml的优先级更高,这样做是为了避免在将来更新主题时,把已经配置好的配置文件一并覆盖了 注意,不要弄混博客配置文件(_config.yml)和主题配置文件(_config.butterfly.yml) 打开_config.butterfly.yml 这个主题很强大,所以配置文件也很长,接近1000行(所以请善用搜索功能) 但不用担心...
『Linux』screen 命令用法
Why 也许你遇到过使用telnet或SSH远程登录linux,运行一些程序。如果这些程序需要运行很长时间(几个小时),而程序运行过程中出现网络故障,或者客户机故障,这时候客户机与远程服务器的链接将终端,并且远程服务器没有正常结束的命令将被迫终止。 又比如你SSH到主机上后,开始批量的scp命令,如果这个ssh线程断线了,scp进程就中断了。在远程服务器上正在运行某些耗时的作业,但是工作还没做完快要下班了,退出的话就会中断操作了,如何才好呢? What GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。 会话恢复 只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。 多窗口 在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以...
Hexo + Butterfly 建站指南(二)部署至个人站点或 GitHub Pages
现在我们需要把静态文件上传到公网上,让所有人都能访问 打开_config.yml,拉到最底下,找到# Deployment那一块,现在我们需要配置这里 按照官方文档有很多种方法,一般情况下只用得着两种:SFTP和Git SFTP推送至个人服务器是付费方案,Git推送至GitHub是免费方案 法一:SFTP 租过个人服务器的都是有Linux经验的,这里我就简单点说 安装Web服务器 一般用Nginx或者Apache就行,这里以Nginx为例 12sudo apt updatesudo apt install nginx 配置本地文件 先安装hexo-deployer-sftp依赖 1npm install hexo-deployer-sftp --save 查阅官方文档来配置: 12345678910deploy: type: sftp host: <host> user: <user> pass: <password> remotePath: [remote path] port: [port] privateKey: [path/to/privateKey] passphrase: [passphrase] agent: [path/to/agent/socket] 参数 描述 默认值 host 远程主机的地址 user 使用者名称 pass 密码 remotePath 远程主机的根目录 / port 端口 22 privateKey ssh私钥的目录地址 passph...
Hexo + Butterfly 建站指南(一)Hexo 框架
先安装 Node.js 因为Hexo依赖于Node.js运行,所以我们需要先安装Node.js 前往官网下载安装长期维护版即可,如果使用最新版本的软件时出现问题,可以尝试我使用的版本 安装完成后,按下 Windows + R 打开运行,输入CMD并回车,打开命令提示符 依次输入下面的命令查询版本号,如果能查询到版本号,那么就算安装成功 12node -vnpm -v 安装 Hexo 现在可以安装Hexo了,使用下面的命令来安装 1npm install -g hexo-cli 可能会出现几个报错,可以忽略 老规矩,查一下版本号 1hexo -v 这样Hexo就算是安装完了 初始化博客目录 现在需要准备一个目录来存放你的博客文件,例如我使用D:\Hexo,然后需要在命令行中使用cd移动至这个目录,如果不在C盘,则还需要加上/d参数 1cd /d D:/Hexo 在这个目录下使用hexo init 你的博客名字初始化你的博客目录 1hexo init MyBlog 在我的例子中,现在D:/Hexo/MyBlog就是博客目录了,此后执行Hexo命令时默认在此目录中执行,现在切进去安装依赖,并初始public目录 123cd ./MyBlognpm installhexo g 打开这个目录,可以看见已经初始化了一些文件,挑几个重点的说 source:页面与文章目录,内部的_posts文件夹里存放着你的文章(你会发现里面已经有了一个hello-world.md) themes:主题目录 public:存放生成的静态网页,部署就是把里面的内容复制到云端 _config.ym...
Hexo + Butterfly 建站指南(〇)前言
恭喜你发现了宝藏!🎉🎉🎉 本系列是这个博客网站的搭建教程,个人的踩坑经历也会一并记录 因为需要面向小白,所以很多地方会讲的比较细碎 这个博客系统的运作流程是:在本地安装配置 Hexo框架 + Butterfly主题 ,然后根据 Markdown文档 生成静态文件,再推送至云端,公网上只需要一个网页服务器就行 目录 正文 Hexo + Butterfly 建站指南(〇)前言 Hexo + Butterfly 建站指南(一)Hexo 框架 Hexo + Butterfly 建站指南(二)部署至个人站点或 GitHub Pages Hexo + Butterfly 建站指南(三)Butterfly 主题 Hexo + Butterfly 建站指南(四)Twikoo 评论系统 Hexo + Butterfly 建站指南(五)日常写作 Hexo + Butterfly 建站指南(六)PicGO + Gitee 图床(已废弃) Hexo + Butterfly 建站指南(七)阿里云 OSS 图床 Hexo + Butterfly 建站指南(八)使用 KaTeX 数学公式 附录 『Twikoo』解决 Vercel.app 在国内被墙导致无法使用的问题 Hexo 首页添加 Gitcalendar 提交日历 阿里云OSS被刷,我交了1000RMB学费! 鸣谢 Hexo 官网 Butterfly 主题官方文档 Hexo+Butterfly主题美化 | 唐先森の博客(这位是真大佬) PicGo+码云(gitee)图床环境搭建 懒人包 因为整个过程还是比较繁琐的,记忆里我...
『Linux』使用 ffmpeg 下载 m3u8 视频
众所周知,很多视频都是m3u8格式的,我一般会用 M3U8批量下载器 下载,但有时候资源是外网的,梯子网速又有点慢,这时候就可以挂到外网的服务器上下载 这里我建议用ffmpeg,毕竟很多M3U8的下载工具都是用它封装的 安装 可以选择去官网下载安装,但是我比较懒,直接用apt算了 12sudo apt updatesudo apt install ffmpeg 老规矩,如果能查到版本号那就是安装成功了 1ffmpeg -version 使用 套下面这个模板即可 1ffmpeg -i <你的m3u8的URL> -c copy <保存的文件位置> 例: 1ffmpeg -i https://www.example.com/example.m3u8 -c copy ~/example.mp4 缺点 下载时间可能很长,如果关掉窗口就结束了进程,建议配合 screen 使用 下载是单线程的,效率比较低
『C/C++』可变参数
从 scanf() 和 printf() 讲起 在使用 scanf() 和 printf() 时,你会发现一个奇怪的现象,它的参数个数是不确定的,格式化字符串中有多少个%,后面就要跟多少个参数 1234printf("%d",a);printf("%d %d",a,b);printf("%d %d %d",a,b,c);...... 但在我们一般的印象中,一个函数在被声明时,它的参数个数就固定了,不能改变 让我们在 stdio.h 中找到 scanf() 的定义: 12345678int scanf(const char *__format, ...){ int __retval; __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format ); __retval = __mingw_vfscanf( stdin, __format, __local_argv ); __builtin_va_end( __local_argv ); return __retval;} 接受参数怎么有个省略号?还可以这样写吗? 这便牵扯到可变参数 可变参数的头文件 我们在使用可变参数时,需要引入 stdarg.h 头文件 在 stdarg.h 中,有一个数据类型,四个宏 类型 描述 va_list 用来保存宏 va_arg 与宏 va_end 所需信息 宏 描述 va_start...
『C/C++』结构体内存对齐问题
初始的问题 先来看一个问题,对于下面这两个结构体,它们的大小是一样的吗? 1234567struct x{char c;double d;int i;} a;printf("%d\n", sizeof(a)); 1234567struct y{ char c; int i; double d;} b;printf("%d\n", sizeof(b)); 你可能认为它们是一样的,但实际上是不一样的,一个是24,另一个是16 也据说是:结构体的大小并不是简单地将每个结构体成员的大小相加就能得到 如何计算结构体大小 首先我们要了解各种基本类型的大小 Type sizeof(Type) char 1 short 2 float 4 int 4 long 4 long long 8 double 8 long double 16 一般情况 后声明的类型永远认为结构体是按照自己的类型来的(找当前类型大小的最小倍数位置存放) 整个结构体补全到最大类型的整数倍 在第一个例子中 先声明了char类型,占用了1字节 然后声明int类型,他发现前4个字节有部分被占用了(无法使用),就跳过4个字节声明了自己,占用4字节 然后声明double类型,前8个字节有被占用,跳过8个字节声明自己,占用8字节 总计16字节,是8的倍数,所以结果为16 在第二个例子中 先声明char占用1字节 然后声明double,前8字节被占用,跳过前8字节声明自己,占用8字节 最后...
Gin 入门笔记(五)路由分组和路由文件抽离
在之前的方法中,配置路由、处理数据都在 main.go 文件中进行,当遇到稍大的项目时维护就会十分吃力,也难以团队协作,所以我们现在需要进行路由分组和文件抽离 12345678910111213141516171819202122232425262728293031323334353637383940414243package mainimport ( "github.com/gin-gonic/gin")func main() { r := gin.Default() //前台路由 r.GET("/", func(c *gin.Context) { c.String(200, "首页") }) r.GET("/news", func(c *gin.Context) { c.String(200, "新闻") }) //后台路由 r.GET("/admin", func(c *gin.Context) { c.String(200, "后台首页") }) r.GET("/admin/user", func(c *gin.Context) { c.String(200, "设置用户") }) r.GET("/admin/article", func(c *gin.Context) ...
Go 切片(Slice)
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,容量(cap)不够时会自动扩容 切片为引用类型,从数组中得到的切片修改元素值时,原数组也会发生变化,修改原数组时,切片也会变化 创建切片的四种方法 var 1var s []uint32 2.切片字面量,这样创建的切片长度和容量都等于初始元素个数 1s := []uint32{1, 2, 3} 3.make 使用make创建,可以指定长度和容量。格式为make([]type, len[, cap]),可以只指定长度,也可以长度容量同时指定 123s1 := make([]uint32)s2 := make([]uint32, 1)s3 := make([]uint32, 1, 10) 4,截取符,可以从现成的数组或切片创建 12345var arr [10]uint32s1 := arr[0:5]s2 := arr[:5]s3 := arr[5:]s4 := arr[:] 二、添加元素 使用append()函数向切片中添加元素,可以一次添加 0 个或多个元素,如果容量不够会自动扩容 1234567s := make([]uint32, 0, 4)s = append(s, 1, 2, 3)fmt.Println(len(s), cap(s)) // 3 4s = append(s, 4, 5, 6)fmt.Println(len(s), cap(s)) // 6 8 使用copy...