安装 ent 包
go install entgo.io/ent/cmd/ent@latest
生成初始化代码
在项目根目录创建目录:ent/schema
在schema目录创建空表代码文件 DrData.go:
type DrData struct {
ent.Schema
}
// Fields of the Data.
fun...
执行命令:protoc --go_out=. param.proto 时,生成go文件报错,完整报错信息如下:
protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available...
logrus 仓库地址:https://github.com/sirupsen/logrus
实现代码:
func init() {
// 配置日志格式
logrus.SetReportCaller(true)
logrus.SetFormatter(&MyFormatter{})
logrus.SetLevel(logrus.DebugLev...
安装依赖:
go get github.com/oschwald/geoip2-golang
数据库文件下载地址(需注册用户):
https://www.maxmind.com/en/accounts/current/geoip/downloads
示例代码:
type Result struct {
Country string `js...
基于:github.com/gorilla/websocket 实现
func main() {
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
ws := "ws://127.0.0.1:8080/ws"
c, _, err := websocket.DefaultDia...
etcdctl基本使用
增加一条数据
etcdctl put "/school/class/name" "helios"
获取一条数据
etcdctl get "/school/class/name"
得到一组数据
etcdctl get "/school/class/" --prefix
得到所有的key
etcdctl --keys-on...
限量核心代码:limit.go
type Limit struct {
Name string
Key string
Rate int64
Max int64
Default int64
}
func (l *Limit) Add(a, b float64) float64 {
return a + b
}
//...
获取请求报文
请求报文格式说明
HTTP请求报文由请求行、请求头、空行、请求体四个部分组成,如下图:
请求行
请求行由方法字段和HTTP协议版本字段3个部分组成,他们呢之间使用空格隔开。
HTTP请求方法由GET...
网络分层架构
典型协议
传输层:常见协议有TCP/UDP协议
应用层:常见的协议有HTTP协议,FTP协议
网络层:常见协议有IP协议,ICMP协议,IGMP协议
网络接口层:常见协议有ARP协议,RARP协议
TCP传输协议(Transmission ...
条件变量的作用并不保证同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生变化时,通知阻塞在某个条件上的协程(线程)。条件变量不是锁,在兵法中不能达到同步的目的,因此条件变量总是与锁一起...
注意:仅作为学习参考,并没有完整实现所有类型
type User struct {
Name string
Age int
Sex byte `json:"sex"`
}
type Book struct {
ISBN string `json:"isbn"`
Name string
Price ...
time.Timer
Timer 是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间。
type Timer struct {
C <-chan Time
r runtimeTimer
}
它提供一个channel,在定时时间到达之前,没有数据写入timer.C ...
概述
简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。
随着硬件技术的发展,并发程序变得越来越重要。web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会后台执行各种计算任务和网络请...
func main() {
msg, err := ExecAsRes("ls -al|grep test")
fmt.Println(msg, err)
}
// ExecAsRes 执行shell指令,有返回值
func ExecAsRes(cmd string) (msg string, err error) {
param := append([]string{"-...
func main() {
err := CreateMutiDir("/Users/jackey/a/b")
if err != nil {
fmt.Println("创建失败", err)
} else {
fmt.Println("创建成功")
}
}
// CreateMutiDir 调用os.MkdirAll递归...