mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
This pull request standardizes the use of the Go 1.18+ `any` type alias
instead of `interface{}` throughout the codebase. The change improves
code readability and aligns with modern Go best practices. The update
touches many files, including core data structures, code generation
templates, logging utilities, and test data, ensuring consistency across
all usages.
**Type alias migration to `any`:**
* Replaced all instances of `interface{}` with `any` in core data
structures such as `garray` and in generated model structs (e.g.,
`TableUser`, `User1`, `User2`) to modernize type usage.
[[1]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L31-R31)
[[2]](diffhunk://#diff-6c19859cb32c7516ea95ddc8f8235460818eb2f24d2204308e0d9e1b19e7d90fL15-R19)
[[3]](diffhunk://#diff-a15ba2f5e830b4833c47b902515a4f9e5a4f83a3707698f3229b307ec3776b41L15-R18)
[[4]](diffhunk://#diff-52e0837e84d49221d1b810d88fdf78221f36cffcd664fb42f8aba49a79b974dcL15-R19)
[[5]](diffhunk://#diff-11c3457d1a23a4ca6ecd00d6b856289774936b6a708384cf03aff164044e7546L15-R19)
[[6]](diffhunk://#diff-2cff9cf8e6a0cc34087326d8c8149c3bbaf74c76fdbdf5a73daed13cc04249e1L15-R19)
* Updated function signatures, method parameters, and return types from
`interface{}` to `any` in various parts of the codebase, including code
generation, service logic, and logging utilities (e.g., `mlog`).
[[1]](diffhunk://#diff-175edfeea54490b8fe4e18ffcbea5835efaf8f0b8acf623359073987cae7eb76L48-R55)
[[2]](diffhunk://#diff-2b1953fb78cf3593d8c2c7d911e95b65fd0b847c30ed0b4d167d16fe6d781235L54-R74)
[[3]](diffhunk://#diff-e001b7a4b63603b9b14f00de78a4d570bb76c5f57d856a24643f071032e12356L66-R73)
[[4]](diffhunk://#diff-5582954e8a9983988dc8854ad82067fb2ac6269b988e07357ad8db1dfec5f1a0L39-R41)
[[5]](diffhunk://#diff-c5d51d56f487779a2b6207c7ad26c7a20bbadcc846ce094fe60ab4cabff58c51L107-R107)
[[6]](diffhunk://#diff-f96e6a9fdb416eb1804ceaba1fe0ac637bff22c43837f8bb849c2366ce72d4a1L116-R121)
[[7]](diffhunk://#diff-f94c83a1b08ae060d9346f4a6031fc4a7b9a0b894e02d9afaa09018b6598eac0L112-R112)
[[8]](diffhunk://#diff-748b11dbe8828dd4c040ec23cae0b8fe57ecf0a2d1b7694ea39102294e633c64L36-R36)
[[9]](diffhunk://#diff-748b11dbe8828dd4c040ec23cae0b8fe57ecf0a2d1b7694ea39102294e633c64L74-R74)
[[10]](diffhunk://#diff-748b11dbe8828dd4c040ec23cae0b8fe57ecf0a2d1b7694ea39102294e633c64L96-R96)
**Generated code and templates:**
* Adjusted generated files and code generation templates to output `any`
instead of `interface{}` for relevant struct fields and function
signatures, ensuring that new code generation aligns with the updated
convention.
[[1]](diffhunk://#diff-6c19859cb32c7516ea95ddc8f8235460818eb2f24d2204308e0d9e1b19e7d90fL15-R19)
[[2]](diffhunk://#diff-a15ba2f5e830b4833c47b902515a4f9e5a4f83a3707698f3229b307ec3776b41L15-R18)
[[3]](diffhunk://#diff-52e0837e84d49221d1b810d88fdf78221f36cffcd664fb42f8aba49a79b974dcL15-R19)
[[4]](diffhunk://#diff-11c3457d1a23a4ca6ecd00d6b856289774936b6a708384cf03aff164044e7546L15-R19)
[[5]](diffhunk://#diff-2cff9cf8e6a0cc34087326d8c8149c3bbaf74c76fdbdf5a73daed13cc04249e1L15-R19)
[[6]](diffhunk://#diff-175edfeea54490b8fe4e18ffcbea5835efaf8f0b8acf623359073987cae7eb76L48-R55)
[[7]](diffhunk://#diff-e001b7a4b63603b9b14f00de78a4d570bb76c5f57d856a24643f071032e12356L66-R73)
[[8]](diffhunk://#diff-5582954e8a9983988dc8854ad82067fb2ac6269b988e07357ad8db1dfec5f1a0L39-R41)
**Container and utility updates:**
* Refactored the `garray` container implementation and related
constructors/methods to use `[]any` instead of `[]interface{}`, along
with corresponding function signatures.
[[1]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L31-R31)
[[2]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L52-R52)
[[3]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L62-R62)
[[4]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L73-R86)
[[5]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L96-R97)
[[6]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L107-R114)
[[7]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L124-R124)
[[8]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L135-R143)
[[9]](diffhunk://#diff-3a1259e160a4dfa5fe49dfe739fbdb986c0d0a2220a709882ea48d3ae1b8f911L167-R167)
These changes collectively modernize the codebase and prepare it for
future Go developments by using the idiomatic `any` type.
122 lines
4.2 KiB
Go
122 lines
4.2 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package g
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/gogf/gf/v2/container/gvar"
|
|
"github.com/gogf/gf/v2/internal/empty"
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
"github.com/gogf/gf/v2/os/gproc"
|
|
"github.com/gogf/gf/v2/util/gutil"
|
|
)
|
|
|
|
// Go creates a new asynchronous goroutine function with specified recover function.
|
|
//
|
|
// The parameter `recoverFunc` is called when any panic during executing of `goroutineFunc`.
|
|
// If `recoverFunc` is given nil, it ignores the panic from `goroutineFunc` and no panic will
|
|
// throw to parent goroutine.
|
|
//
|
|
// But, note that, if `recoverFunc` also throws panic, such panic will be thrown to parent goroutine.
|
|
func Go(
|
|
ctx context.Context,
|
|
goroutineFunc func(ctx context.Context),
|
|
recoverFunc func(ctx context.Context, exception error),
|
|
) {
|
|
gutil.Go(ctx, goroutineFunc, recoverFunc)
|
|
}
|
|
|
|
// NewVar returns a gvar.Var.
|
|
func NewVar(i any, safe ...bool) *Var {
|
|
return gvar.New(i, safe...)
|
|
}
|
|
|
|
// Wait is an alias of ghttp.Wait, which blocks until all the web servers shutdown.
|
|
// It's commonly used in multiple servers' situation.
|
|
func Wait() {
|
|
ghttp.Wait()
|
|
}
|
|
|
|
// Listen is an alias of gproc.Listen, which handles the signals received and automatically
|
|
// calls registered signal handler functions.
|
|
// It blocks until shutdown signals received and all registered shutdown handlers done.
|
|
func Listen() {
|
|
gproc.Listen()
|
|
}
|
|
|
|
// Dump dumps a variable to stdout with more manually readable.
|
|
func Dump(values ...any) {
|
|
gutil.Dump(values...)
|
|
}
|
|
|
|
// DumpTo writes variables `values` as a string in to `writer` with more manually readable
|
|
func DumpTo(writer io.Writer, value any, option gutil.DumpOption) {
|
|
gutil.DumpTo(writer, value, option)
|
|
}
|
|
|
|
// DumpWithType acts like Dump, but with type information.
|
|
// Also see Dump.
|
|
func DumpWithType(values ...any) {
|
|
gutil.DumpWithType(values...)
|
|
}
|
|
|
|
// DumpWithOption returns variables `values` as a string with more manually readable.
|
|
func DumpWithOption(value any, option gutil.DumpOption) {
|
|
gutil.DumpWithOption(value, option)
|
|
}
|
|
|
|
// DumpJson pretty dumps json content to stdout.
|
|
func DumpJson(value any) {
|
|
gutil.DumpJson(value)
|
|
}
|
|
|
|
// Throw throws an exception, which can be caught by TryCatch function.
|
|
func Throw(exception any) {
|
|
gutil.Throw(exception)
|
|
}
|
|
|
|
// Try implements try... logistics using internal panic...recover.
|
|
// It returns error if any exception occurs, or else it returns nil.
|
|
func Try(ctx context.Context, try func(ctx context.Context)) (err error) {
|
|
return gutil.Try(ctx, try)
|
|
}
|
|
|
|
// TryCatch implements try...catch... logistics using internal panic...recover.
|
|
// It automatically calls function `catch` if any exception occurs and passes the exception as an error.
|
|
//
|
|
// But, note that, if function `catch` also throws panic, the current goroutine will panic.
|
|
func TryCatch(ctx context.Context, try func(ctx context.Context), catch func(ctx context.Context, exception error)) {
|
|
gutil.TryCatch(ctx, try, catch)
|
|
}
|
|
|
|
// IsNil checks whether given `value` is nil.
|
|
// Parameter `traceSource` is used for tracing to the source variable if given `value` is type
|
|
// of pointer that also points to a pointer. It returns nil if the source is nil when `traceSource`
|
|
// is true.
|
|
// Note that it might use reflect feature which affects performance a little.
|
|
func IsNil(value any, traceSource ...bool) bool {
|
|
return empty.IsNil(value, traceSource...)
|
|
}
|
|
|
|
// IsEmpty checks whether given `value` empty.
|
|
// It returns true if `value` is in: 0, nil, false, "", len(slice/map/chan) == 0.
|
|
// Or else it returns true.
|
|
//
|
|
// The parameter `traceSource` is used for tracing to the source variable if given `value` is type of pointer
|
|
// that also points to a pointer. It returns true if the source is empty when `traceSource` is true.
|
|
// Note that it might use reflect feature which affects performance a little.
|
|
func IsEmpty(value any, traceSource ...bool) bool {
|
|
return empty.IsEmpty(value, traceSource...)
|
|
}
|
|
|
|
// RequestFromCtx retrieves and returns the Request object from context.
|
|
func RequestFromCtx(ctx context.Context) *ghttp.Request {
|
|
return ghttp.RequestFromCtx(ctx)
|
|
}
|