关于RPC的网络模块其实还有很多地方可以挖掘,还有很多细节可以去深究,还有很多配置去优化,写代码,对待人生,玩游戏都是这样
写代码,人家的代码,总是人家的代码,跟别人家的孩子一样,性能是那么的卓越,bug总是那么少,你跟别人总是差一点,就差一点,这一点点就成了鸿沟了
关于RPC的网络模块其实还有很多地方可以挖掘,还有很多细节可以去深究,还有很多配置去优化,写代码,对待人生,玩游戏都是这样
写代码,人家的代码,总是人家的代码,跟别人家的孩子一样,性能是那么的卓越,bug总是那么少,你跟别人总是差一点,就差一点,这一点点就成了鸿沟了
用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。
信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。
YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)的缩写。
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。
它使用 空白符号缩排 和 大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
项目当中的应用:

web 开发免不了要和 cookie 打交道。Go 的 http 库也提供了 cookie 的相关操作。
type Cookie struct {
Name string
Value string
Path string
Domain string
Expires time.Time
RawExpires string
MaxAge int
Secure bool
HttpOnly bool
Raw string
Unparsed []string
}
Name 字段为 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 则是 cookie 的存储的范围。Expires 是 cookie 的过期时间,如果不设置,那么这是一个 session 型的 cookie,即浏览器会话有用,一旦关闭浏览器,cookie 随即会被删除。
我们先来看看最简单的本地静态文件服务配置示例:
server {
listen 80;
server_name www.test.com;
charset utf-8;
root /data/www.test.com;
index index.html index.htm;
}
package main
import (
"fmt"
)
type A struct {
Text string
Name string
}
func (a *A) Say() {
fmt.Printf("A::Say():%s\n", a.Text)
}
type B struct {
A
Name string
}
func (b *B) Say() {
b.A.Say()
fmt.Printf("B::Say():%s\n", b.Text)
}
func main() {
b := B{A{"hello, world", "张三"}, "李四"}
b.Say()
fmt.Println("b的名字为:", b.Name)
// 如果要显示 B 的 Name 值
fmt.Println("b的名字为:", b.A.Name)
}
输出:
A::Say():hello, world B::Say():hello, world b的名字为: 李四 b的名字为: 张三
本小节主要描述了如何在工程中使用多目录、各种安装指令以及CMAKE_INSTALL_PREFIX变量(你真够牛的,这么点东西居然罗唆了这么多文字)在下一小节,我们将探讨如何在cmake中构建动态库和静态库,以及如何使用外部头文件和外部共享库,毕竟,这是程序编写中最长使用的(对了,你知道用怎样的gcc参数可以直接构建静态库和动态库吗?)
项目开发阶段流程