Skip to content

Commit

Permalink
perf: 最低版本改为 go1.21
Browse files Browse the repository at this point in the history
  • Loading branch information
caixw committed Mar 7, 2024
1 parent 5e88dc1 commit 00b68ba
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 64 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,31 @@ jobs:
test:
name: Test
runs-on: ${{ matrix.os }}

strategy:
matrix:
os: [ubuntu-latest, macOS-latest, windows-latest]
go: ['1.19.x', '1.22.x']
go: ['1.21.x', '1.22.x']

steps:

- name: Check out code into the Go module directory
uses: actions/checkout@v4

- name: Set up Go ${{ matrix.go }}
uses: actions/setup-go@v4
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go

- name: Vet
run: go vet -v ./...

- name: Test
run: go test -v -coverprofile='coverage.txt' -covermode=atomic ./...

- name: Upload Coverage report
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
with:
token: ${{secrets.CODECOV_TOKEN}}
file: ./coverage.txt
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ require (
github.com/issue9/assert/v4 v4.1.1
github.com/issue9/errwrap v0.3.2
github.com/issue9/localeutil v0.26.4
github.com/issue9/sliceutil v0.15.1
github.com/issue9/term/v3 v3.2.7
golang.org/x/text v0.14.0
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
)

require golang.org/x/sys v0.18.0 // indirect

go 1.19
go 1.21
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ github.com/issue9/errwrap v0.3.2 h1:7KEme9Pfe75M+sIMcPCn/DV90wjnOcRbO4DXVAHj3Fw=
github.com/issue9/errwrap v0.3.2/go.mod h1:KcCLuUGiffjooLCUjL89r1cyO8/HT/VRcQrneO53N3A=
github.com/issue9/localeutil v0.26.4 h1:rfBC3YAt9PLHXHc5unreZpYjlEt+xCnVOUr7QDAveiw=
github.com/issue9/localeutil v0.26.4/go.mod h1:BJXJwcAT9CyyVZOlqfmq+B5FcPbqGxGjYnTYbVuiMM8=
github.com/issue9/sliceutil v0.15.1 h1:mV1VlQSO5E8sh2ab6pypLg7TdgGZlDb30E8quli01xY=
github.com/issue9/sliceutil v0.15.1/go.mod h1:ldun6sT4/bOJxuMtOXhtc6P7GCwE7L+avV86HNks7qk=
github.com/issue9/term/v3 v3.2.7 h1:esfhoinbQ65P3oFscXhticrDFOgZJQqUwL/IC70HiWc=
github.com/issue9/term/v3 v3.2.7/go.mod h1:DvA/fPiKzX11P/ZoVWJG5QMVpI0ia+uqiU31iZV2jHE=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
Expand Down
9 changes: 2 additions & 7 deletions handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"encoding/json"
"fmt"
"io"
"maps"
"os"
"sync"

Expand Down Expand Up @@ -330,12 +331,6 @@ func (h *termHandler) Handle(e *Record) {
}

func (h *termHandler) New(detail bool, lv Level, attrs []Attr) Handler {
// TODO(go1.21): 改为 maps.Copy
fc := make(map[Level]colors.Color, len(h.foreColors))
for k, v := range h.foreColors {
fc[k] = v
}

l := "[" + colors.Sprint(colors.Normal, h.foreColors[lv], colors.Default, lv.String()) + "]"

b := NewBuffer(false)
Expand All @@ -352,7 +347,7 @@ func (h *termHandler) New(detail bool, lv Level, attrs []Attr) Handler {
level: []byte(l),
detail: detail,
},
foreColors: fc,
foreColors: maps.Clone(h.foreColors),
}
}

Expand Down
21 changes: 0 additions & 21 deletions log.go

This file was deleted.

21 changes: 8 additions & 13 deletions logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
package logs

import (
"slices"
"sync"

"github.com/issue9/localeutil"
"github.com/issue9/sliceutil"
)

var attrLogsPool = &sync.Pool{
Expand Down Expand Up @@ -93,10 +93,7 @@ func New(h Handler, o ...Option) *Logs {
// Enable 允许的日志通道
//
// 调用此函数之后,所有不在 level 参数的通道都将被关闭。
func (logs *Logs) Enable(level ...Level) {
// TODO(go1.21): 采用 slices.Clone 代替
logs.levels = append([]Level{}, level...)
}
func (logs *Logs) Enable(level ...Level) { logs.levels = slices.Clone(level) }

// AppendAttrs 为所有的 [Logger] 对象添加属性
func (logs *Logs) AppendAttrs(attrs map[string]any) {
Expand All @@ -106,10 +103,7 @@ func (logs *Logs) AppendAttrs(attrs map[string]any) {
}

// IsEnable 指定级别日志是否会真实被启用
func (logs *Logs) IsEnable(l Level) bool {
// TODO(go1.21): 采用 slices.Index 代替
return sliceutil.Exists(logs.levels, func(v Level, _ int) bool { return v == l })
}
func (logs *Logs) IsEnable(l Level) bool { return slices.Index(logs.levels, l) >= 0 }

func (logs *Logs) INFO() *Logger { return logs.Logger(LevelInfo) }

Expand All @@ -130,7 +124,7 @@ func (logs *Logs) Logger(lv Level) *Logger { return logs.loggers[lv] }
func (logs *Logs) New(attrs map[string]any) *AttrLogs {
l := attrLogsPool.Get().(*AttrLogs)
l.attrs = attrs
l.loggers = make(map[Level]*Logger, len(logs.loggers)) // TODO(go1.21): clear
clear(l.loggers)
l.logs = logs
return l
}
Expand Down Expand Up @@ -172,11 +166,12 @@ func (l *AttrLogs) AppendAttrs(attrs map[string]any) {

func (l *AttrLogs) NewRecord() *Record { return l.logs.NewRecord() }

// Free 回收 [AttrLogs]
// FreeAttrLogs 回收 [AttrLogs]
//
// NOTE: 此操作会让 logs 不再可用。
// 除非需要频繁地生成 [AttrLogs] 且其生命周期都有固定的销毁时间点,
// 如果需要频繁地生成 [AttrLogs] 且其生命周期都有固定的销毁时间点,
// 可以用此方法达到复用 [AttrLogs] 以达到些许性能提升。
//
// NOTE: 此操作会让 logs 不再可用。
func FreeAttrLogs(logs *AttrLogs) {
for _, l := range logs.loggers {
if l != nil {
Expand Down
8 changes: 3 additions & 5 deletions options.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package logs

import (
"fmt"
"log/slog"

"github.com/issue9/localeutil"
)
Expand All @@ -23,11 +24,8 @@ const (

type Option func(*Logs)

// WithStd 是否接管默认的日志处理程序
//
// 如果是 go1.21 之前的版本,会调用 [log.SetOutput] 管理默认日志的输出,输出到 [logs.INFO];
// 如果是 go1.21 之后的版本,会调用 [slog.SetDefault] 管理默认日志的输出;
func WithStd() Option { return func(l *Logs) { withStd(l) } }
// WithStd 是否接管标准库中 log 和 log/slog 中的全局输出函数
func WithStd() Option { return func(l *Logs) { slog.SetDefault(slog.New(l.SLogHandler())) } }

// WithLevels 指定启用的日志级别
//
Expand Down
7 changes: 5 additions & 2 deletions record.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@ var (
)

type (
// Recorder 定义了输出一条日志记录的各种方法
// Recorder 定义了输出一条日志的各种方法
//
// 这可能是一个临时对象,当调用除 With 之外的方法输出日志之后,
// 将不再保证 Recorder 依然是有效的。
Recorder interface {
// With 创建带有指定属性的 [Recorder] 对象
// With 为输出的日志带上指定的参数
//
// 返回对象与当前对象未必是同一个,由实现者决定。
// 且返回对象是一次性的,在调用 Error、String 等输出之后即被回收。
Expand Down
4 changes: 0 additions & 4 deletions slog.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
//
// SPDX-License-Identifier: MIT

//go:build go1.21

package logs

import (
Expand All @@ -26,8 +24,6 @@ type slogHandler struct {
prefix string // groups 组成
}

func withStd(l *Logs) { slog.SetDefault(slog.New(l.SLogHandler())) }

// SLogHandler 将 logs 转换为 [slog.Handler] 接口
//
// 所有的 group 会作为普通 attr 的名称前缀,但是不影响 Level、Message 等字段。
Expand Down
2 changes: 0 additions & 2 deletions slog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
//
// SPDX-License-Identifier: MIT

//go:build go1.21

package logs

import (
Expand Down

0 comments on commit 00b68ba

Please sign in to comment.