Go语言标准库之log和三方库zap Go语言内置的log包实现了简单的日志服务。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列、Fatal系列、和Panic系列来使用,比自行创建一个logger对象更容易使用。Fatal系列用于输出一条致命错误信息,并调用 os.Exit(1) 终止程序运行。这个函数会在打印完错误信息之后立即调用 os.Exit 退出程序。
Gin框架基础 方法有: ShouldBind(), ShouldBindJSON(), ShouldBindXML(), ShouldBindQuery(), ShouldBindYAML(), ShouldBindHeader(), ShouldBindTOML(),方法有: Bind(), BindJSON(), BindXML(), BindQuery(), BindYAML(), BindHeader(), BindTOML()。原理都是一样的: 需要在要绑定的所有字段上,设置相应的 tag。
微服务框架Go-kit 01 - 基础示例 Go kit 是一个用于构建可扩展、灵活和可维护微服务的框架和工具集合。它提供了一系列库和组件,涵盖了微服务开发的各个方面,包括服务发现、负载均衡、通信、日志记录、请求跟踪、限流、熔断等。在 Go kit 中,将服务的业务逻辑封装到 Service 接口的实现中,然后通过 Endpoint 将外部请求转发到相应的 Service 方法。最后,通过 Transport 处理请求和响应的传输细节。
gRPC框架 这是一个使用 Protocol Buffers(protobuf)和 Go gRPC 插件生成代码的示例命令。该命令根据 proto/user.proto 文件生成对应的 Go 代码。最后会在proto目录下生成user.pb.go和user_grpc.pb.go。如果查不到指令,检查一下环境变量。实现服务端和客户端的数据传输。先执行服务端,再执行客户端。
git操作 什么是仓库呢?就是可以用git管理的一个目录,这个仓库里所有的文件的改动(增加/修改/删除)都由git跟踪记录。也能通过git查看所有的记录,当然也能够通过git“还原”到某个记录点。远端仓库的别名一般是:origin。
Docker入门 纯物理服务器部署部署非常慢:购买服务器 --> 部署操作系统 --> 安装应用,这仅仅是对于一台服务器的流程。如果对于集群,有多台服务器,部署就会非常慢成本非常高:服务器成本高资源浪费:如果每台服务器的配置都比较高,但是仅仅运行一个应用程序。那就造成资源浪费难于迁移和扩展:迁移时候,需要把服务器的所有配置流程重新造作一边。可能会被限定硬件厂商:应用程序如果是运行在A操作系统,那怎么配置在具有B操作系统的服务器上很多时候,我们只想要一个单独的执行环境,而不需要费劲虚拟出一个完整的计算机。
C++11的多线程、function和bind、可变函数模板 文章目录一、C++11多线程thread1.1 线程thread1.1.1 构造函数1.1.2 主要成员函数1.1.3 范例示范1.2 互斥量1.2.1 独占互斥量std::mutex1.2.2 范例1.2.3 lock_guard和unique_lock的使用和区别1.3 条件变量1.3.1 wait函数1.3.2 wait_for函数1.3.3 wait_until函数1.3.4 notify_one函数1.3.5 notify_all函数1.4 异步操作1.4.1 std::aysnc和std::fu
匿名函数lambda 在C++14之前,lambda表示的形参只能指定具体的类型,没法泛型化。本专栏知识点是通过的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的。上面提到的值捕获、引用捕获都是已经在外层作用域声明的变量,因此这些捕获方式捕获的均为左值,而不能捕获右值。手动书写捕获列表有时候是非常复杂的,这种机械性的工作可以交给编译器来处理,这时候可以在捕获列表中写一个。1)采用值捕获的方式,lambda不能修改其值,如果想要修改,使用mutable修饰。
C++新特性:右值引用,移动语义,完美转发 1)左值可以取地址、位于等号左边;2)而右值没法取地址,位于等号右边。例如int a = 6;1)a可以通过 & 取地址,位于等号左边,所以a是左值。2)6位于等号右边,6没法通过 & 取地址,所以6是个右值。又例如struct A {a_ = a;int a_;A a = A();1)同样的,a可以通过 & 取地址,位于等号左边,所以a是左值。2)A()是个临时值,没法通过 & 取地址,位于等号右边,所以A()是个右值。
C++新特性:智能指针 智能指针主要解决以下问题:1)内存泄漏:内存手动释放,使用智能指针可以自动释放2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题,例如同样的数据帧,但是业务A和业务B处理的逻辑不一样(都是只读)。可以用shared_ptr共享数据帧对象的所有权。线程A释放的时候,shared_ptr的引用计数count - 1,当为0的时候释放数据帧对象指针。主要类型:C++里面的四个智能指针:auto_ptrshared_ptrunique_ptrweak_ptr。
图床项目性能测试 两两匹配可以调换顺序,比如(user,urlmd5)可以和(urlmd5,user)匹配,但是一个不行。本专栏知识点是通过的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的。建立20个TCP连接,使用两个线程,用时20秒,对http://192.168.1.34进行压测。小规模测试的时候,建议一台客户端机器只模拟一个客户端 ./test_upload.sh 1。具体来说,进入fastdfs安装目录,进入test目录下,进行make。
图床项目数据库表设计 share_picture_list 和 share_file_list 类似,只是 share_picture_list 只存储共享图片相关的信息,及分享给未注册用户看的。share_file_list 是存储共享文件(包括图片文件)相关的信息,分享给已注册用户的。
图床项目详解 实现一个能够上传、存储、分享图片的后端项目。1)上传:上传文件,并且如果上传的文件在数据库中有记录,即md5匹配,则实现秒传效果。2)分享(共享)文件:共享文件给其他已注册的用户。其他注册用户可以在 “共享文件–>文件列表” 中看到共享的文件,并且可转存到自己的文件列表或者下载。同样在自己的 “共享文件–>文件列表”中,可以查看共享文件的信息,也可以取消共享若取消共享,除非其他用户已经转存,否则就看不到。
FastDFS介绍 FastDFS(Fast Distributed File System)是一个开源的分布式文件系统,它旨在提供高性能、高可靠性和可扩展性的文件存储解决方案,解决海量数据存储问题。其主要的功能包括:文件存储,同步和访问。特别适合以中小文件(建议范围:4KB < file_size