修订历史
- 2024.03.19 创建笔记
only store small buffers to avoid pointless allocation avoid keeping arbitrarily large buffers
func newBufferPool() *bufferPool {
return &bufferPool{
sync.Pool{
New: func() interface{} {
return new(bytes.Buffer) // return pointer 类型
},
},
}
}
func (b *bufferPool) Put(x *bytes.Buffer) {
if x.Len() > 256 {
return
}
x.Reset()
b.Pool.Put(x)
}
func (l *logger) printf(format string, args ...interface{}) {
buf := l.bufferPool.Get()
fmt.Fprintf(buf, format, args...)
l.writeBuffer(buf)
l.bufferPool.Put(buf)
}
.PHONY: help
help: ## Display help messages.
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
makefile 文件需要以一定的格式组织:
The help target prints out all targets with their descriptions organized beneath their categories. The categories are represented by ‘##@’ and the target descriptions by ‘##’. The awk commands is responsible for reading the entire set of makefiles included in this invocation, looking for lines of the file as xyz: ## something, and then pretty-format the target and help. Then, if there’s a line with ##@ something, that gets pretty-printed as a category. More info on the usage of ANSI control characters for terminal formatting: https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters More info on the awk command: https://linuxcommand.org/lc3_adv_awk.php