gitextract_0lo96hoo/ ├── .gitignore ├── LICENSE ├── README.md ├── demo-wasm/ │ ├── .gitignore │ ├── callback/ │ │ ├── Makefile │ │ ├── index.html │ │ └── main.go │ ├── hello-world/ │ │ ├── Makefile │ │ ├── index.html │ │ └── main.go │ ├── manipulate-dom/ │ │ ├── Makefile │ │ ├── index.html │ │ └── main.go │ └── register-functions/ │ ├── Makefile │ ├── index.html │ └── main.go ├── gee-bolt/ │ ├── day1-pages/ │ │ ├── go.mod │ │ ├── meta.go │ │ └── page.go │ ├── day2-mmap/ │ │ ├── db.go │ │ └── go.mod │ └── day3-tree/ │ ├── go.mod │ ├── meta.go │ ├── node.go │ └── page.go ├── gee-cache/ │ ├── day1-lru/ │ │ └── geecache/ │ │ ├── go.mod │ │ └── lru/ │ │ ├── lru.go │ │ └── lru_test.go │ ├── day2-single-node/ │ │ └── geecache/ │ │ ├── byteview.go │ │ ├── cache.go │ │ ├── geecache.go │ │ ├── geecache_test.go │ │ ├── go.mod │ │ └── lru/ │ │ ├── lru.go │ │ └── lru_test.go │ ├── day3-http-server/ │ │ ├── geecache/ │ │ │ ├── byteview.go │ │ │ ├── cache.go │ │ │ ├── geecache.go │ │ │ ├── geecache_test.go │ │ │ ├── go.mod │ │ │ ├── http.go │ │ │ └── lru/ │ │ │ ├── lru.go │ │ │ └── lru_test.go │ │ ├── go.mod │ │ └── main.go │ ├── day4-consistent-hash/ │ │ ├── geecache/ │ │ │ ├── byteview.go │ │ │ ├── cache.go │ │ │ ├── consistenthash/ │ │ │ │ ├── consistenthash.go │ │ │ │ └── consistenthash_test.go │ │ │ ├── geecache.go │ │ │ ├── geecache_test.go │ │ │ ├── go.mod │ │ │ ├── http.go │ │ │ └── lru/ │ │ │ ├── lru.go │ │ │ └── lru_test.go │ │ ├── go.mod │ │ └── main.go │ ├── day5-multi-nodes/ │ │ ├── geecache/ │ │ │ ├── byteview.go │ │ │ ├── cache.go │ │ │ ├── consistenthash/ │ │ │ │ ├── consistenthash.go │ │ │ │ └── consistenthash_test.go │ │ │ ├── geecache.go │ │ │ ├── geecache_test.go │ │ │ ├── go.mod │ │ │ ├── http.go │ │ │ ├── lru/ │ │ │ │ ├── lru.go │ │ │ │ └── lru_test.go │ │ │ └── peers.go │ │ ├── go.mod │ │ ├── main.go │ │ └── run.sh │ ├── day6-single-flight/ │ │ ├── geecache/ │ │ │ ├── byteview.go │ │ │ ├── cache.go │ │ │ ├── consistenthash/ │ │ │ │ ├── consistenthash.go │ │ │ │ └── consistenthash_test.go │ │ │ ├── geecache.go │ │ │ ├── geecache_test.go │ │ │ ├── go.mod │ │ │ ├── http.go │ │ │ ├── lru/ │ │ │ │ ├── lru.go │ │ │ │ └── lru_test.go │ │ │ ├── peers.go │ │ │ └── singleflight/ │ │ │ ├── singleflight.go │ │ │ └── singleflight_test.go │ │ ├── go.mod │ │ ├── main.go │ │ └── run.sh │ ├── day7-proto-buf/ │ │ ├── geecache/ │ │ │ ├── byteview.go │ │ │ ├── cache.go │ │ │ ├── consistenthash/ │ │ │ │ ├── consistenthash.go │ │ │ │ └── consistenthash_test.go │ │ │ ├── geecache.go │ │ │ ├── geecache_test.go │ │ │ ├── geecachepb/ │ │ │ │ ├── geecachepb.pb.go │ │ │ │ └── geecachepb.proto │ │ │ ├── go.mod │ │ │ ├── http.go │ │ │ ├── lru/ │ │ │ │ ├── lru.go │ │ │ │ └── lru_test.go │ │ │ ├── peers.go │ │ │ └── singleflight/ │ │ │ ├── singleflight.go │ │ │ └── singleflight_test.go │ │ ├── go.mod │ │ ├── main.go │ │ └── run.sh │ └── doc/ │ ├── geecache-day1.md │ ├── geecache-day2.md │ ├── geecache-day3.md │ ├── geecache-day4.md │ ├── geecache-day5.md │ ├── geecache-day6.md │ ├── geecache-day7.md │ └── geecache.md ├── gee-orm/ │ ├── day1-database-sql/ │ │ ├── cmd_test/ │ │ │ └── main.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ └── session/ │ │ ├── raw.go │ │ └── raw_test.go │ ├── day2-reflect-schema/ │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── table.go │ │ └── table_test.go │ ├── day3-save-query/ │ │ ├── clause/ │ │ │ ├── clause.go │ │ │ ├── clause_test.go │ │ │ └── generator.go │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── record.go │ │ ├── record_test.go │ │ ├── table.go │ │ └── table_test.go │ ├── day4-chain-operation/ │ │ ├── clause/ │ │ │ ├── clause.go │ │ │ ├── clause_test.go │ │ │ └── generator.go │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── record.go │ │ ├── record_test.go │ │ ├── table.go │ │ └── table_test.go │ ├── day5-hooks/ │ │ ├── clause/ │ │ │ ├── clause.go │ │ │ ├── clause_test.go │ │ │ └── generator.go │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── hooks.go │ │ ├── hooks_test.go │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── record.go │ │ ├── record_test.go │ │ ├── table.go │ │ └── table_test.go │ ├── day6-transaction/ │ │ ├── clause/ │ │ │ ├── clause.go │ │ │ ├── clause_test.go │ │ │ └── generator.go │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── hooks.go │ │ ├── hooks_test.go │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── record.go │ │ ├── record_test.go │ │ ├── table.go │ │ ├── table_test.go │ │ └── transaction.go │ ├── day7-migrate/ │ │ ├── clause/ │ │ │ ├── clause.go │ │ │ ├── clause_test.go │ │ │ └── generator.go │ │ ├── dialect/ │ │ │ ├── dialect.go │ │ │ ├── sqlite3.go │ │ │ └── sqlite3_test.go │ │ ├── geeorm.go │ │ ├── geeorm_test.go │ │ ├── go.mod │ │ ├── log/ │ │ │ ├── log.go │ │ │ └── log_test.go │ │ ├── schema/ │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ └── session/ │ │ ├── hooks.go │ │ ├── hooks_test.go │ │ ├── raw.go │ │ ├── raw_test.go │ │ ├── record.go │ │ ├── record_test.go │ │ ├── table.go │ │ ├── table_test.go │ │ └── transaction.go │ ├── doc/ │ │ ├── geeorm-day1.md │ │ ├── geeorm-day2.md │ │ ├── geeorm-day3.md │ │ ├── geeorm-day4.md │ │ ├── geeorm-day5.md │ │ ├── geeorm-day6.md │ │ ├── geeorm-day7.md │ │ └── geeorm.md │ └── run_test.sh ├── gee-rpc/ │ ├── day1-codec/ │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ └── server.go │ ├── day2-client/ │ │ ├── client.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ └── server.go │ ├── day3-service/ │ │ ├── client.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ ├── server.go │ │ ├── service.go │ │ └── service_test.go │ ├── day4-timeout/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ ├── server.go │ │ ├── service.go │ │ └── service_test.go │ ├── day5-http-debug/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── debug.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ ├── server.go │ │ ├── service.go │ │ └── service_test.go │ ├── day6-load-balance/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── debug.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ ├── server.go │ │ ├── service.go │ │ ├── service_test.go │ │ └── xclient/ │ │ ├── discovery.go │ │ └── xclient.go │ ├── day7-registry/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── codec/ │ │ │ ├── codec.go │ │ │ └── gob.go │ │ ├── debug.go │ │ ├── go.mod │ │ ├── main/ │ │ │ └── main.go │ │ ├── registry/ │ │ │ └── registry.go │ │ ├── server.go │ │ ├── service.go │ │ ├── service_test.go │ │ └── xclient/ │ │ ├── discovery.go │ │ ├── discovery_gee.go │ │ └── xclient.go │ └── doc/ │ ├── geerpc-day1.md │ ├── geerpc-day2.md │ ├── geerpc-day3.md │ ├── geerpc-day4.md │ ├── geerpc-day5.md │ ├── geerpc-day6.md │ ├── geerpc-day7.md │ └── geerpc.md ├── gee-web/ │ ├── README.md │ ├── day1-http-base/ │ │ ├── base1/ │ │ │ ├── go.mod │ │ │ └── main.go │ │ ├── base2/ │ │ │ ├── go.mod │ │ │ └── main.go │ │ └── base3/ │ │ ├── gee/ │ │ │ ├── gee.go │ │ │ └── go.mod │ │ ├── go.mod │ │ └── main.go │ ├── day2-context/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── go.mod │ │ │ └── router.go │ │ ├── go.mod │ │ └── main.go │ ├── day3-router/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── go.mod │ │ │ ├── router.go │ │ │ ├── router_test.go │ │ │ └── trie.go │ │ ├── go.mod │ │ └── main.go │ ├── day4-group/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── gee_test.go │ │ │ ├── go.mod │ │ │ ├── router.go │ │ │ ├── router_test.go │ │ │ └── trie.go │ │ ├── go.mod │ │ └── main.go │ ├── day5-middleware/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── gee_test.go │ │ │ ├── go.mod │ │ │ ├── logger.go │ │ │ ├── router.go │ │ │ ├── router_test.go │ │ │ └── trie.go │ │ ├── go.mod │ │ └── main.go │ ├── day6-template/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── gee_test.go │ │ │ ├── go.mod │ │ │ ├── logger.go │ │ │ ├── router.go │ │ │ ├── router_test.go │ │ │ └── trie.go │ │ ├── go.mod │ │ ├── main.go │ │ ├── static/ │ │ │ ├── css/ │ │ │ │ └── geektutu.css │ │ │ └── file1.txt │ │ └── templates/ │ │ ├── arr.tmpl │ │ ├── css.tmpl │ │ └── custom_func.tmpl │ ├── day7-panic-recover/ │ │ ├── gee/ │ │ │ ├── context.go │ │ │ ├── gee.go │ │ │ ├── gee_test.go │ │ │ ├── go.mod │ │ │ ├── logger.go │ │ │ ├── recovery.go │ │ │ ├── router.go │ │ │ ├── router_test.go │ │ │ └── trie.go │ │ ├── go.mod │ │ └── main.go │ └── doc/ │ ├── gee-day1.md │ ├── gee-day2.md │ ├── gee-day3.md │ ├── gee-day4.md │ ├── gee-day5.md │ ├── gee-day6.md │ ├── gee-day7.md │ └── gee.md └── questions/ └── 7days-golang-q1.md