common

package
v0.0.0-...-2be58df Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2025 License: BSD-4-Clause Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Type_int8     uint8 = 1
	Type_int16    uint8 = 2
	Type_int32    uint8 = 3
	Type_int64    uint8 = 4
	Type_uint8    uint8 = 5
	Type_uint16   uint8 = 6
	Type_uint32   uint8 = 7
	Type_uint64   uint8 = 8
	Type_float32  uint8 = 9
	Type_float64  uint8 = 10
	Type_bool     uint8 = 11
	Type_string   uint8 = 12
	Type_protoMsg uint8 = 13
)
View Source
const (
	EntityType_Player   string = "Player" // 玩家
	EntityType_DBPlayer string = "DBPlayer"
)
View Source
const (
	//服务器配置文件
	ServerJson = "srv"
	//服务器名字
	ServerName = "sname"
	//服务器资源目录
	ServerRes = "res"
	// 服务器编号
	ServerNumber = "no"
	// docker传入的本地IP
	DockerIP = "ip"
	// docker传入的对外端口
	DockerPost = "publicport"
)
View Source
const (
	DOT               = "."        // 点号
	COMMA             = ","        // 逗号
	SEMICOLON         = ";"        // 分号
	COLON             = ":"        // 冒号
	AET               = "@"        // @符号
	HLINE             = "-"        // 横线
	UNDERLINE         = "_"        // 下划线
	EMPTY             = ""         // 空字符串
	BRACKET_LEFT      = "["        // 左方括号
	BRACKET_RIGHT     = "]"        // 右方括号
	BRACE_LEFT        = "{"        // 左大括号
	BRACE_RIGHT       = "}"        // 右大括号
	PARENTHESIS_LEFT  = "("        // 左圆括号
	PARENTHESIS_RIGHT = ")"        // 右圆括号
	SPRIT             = "/"        // 斜杠
	AND               = "&"        // 与符号
	QUESTION          = "?"        // 问号
	EQUAL             = "="        // 等号
	PROTOCOL          = "://"      // 协议分隔符
	HTTP              = "http://"  // HTTP 协议
	HTTPS             = "https://" // HTTPS 协议
	LF                = "\n"       // 换行符
	CR                = "\r"       // 回车符
	SPACE             = " "        // 空格
)

常用符号常量定义

View Source
const Stop = `` /* 205-byte string literal not displayed */

Variables

View Source
var (
	// 通用成功的回复
	Err_Success = NewError(0, "success")
	// 通用的未知错误
	Err_Unknown = NewError(-1, "unknown error")
)
View Source
var (
	//找不到Key的错误
	Err_Key_not_Found = NewError(-1, "key %s not found")
)
View Source

ASCII 艺术字 "LOGO"

View Source
var OnRecover func(err interface{}, stacktrace string, obj interface{}, args ...interface{})

当有协程发生异常的时候,系统会根据需要捕获异常 然后会把异常详细传递到这里,上层只需要设置这个方法就可以对捕获的异常进行处理

Functions

func Abs

func Abs(n int32) int32

Abs 返回整数的绝对值。

func AddrConvertToIpAndPort

func AddrConvertToIpAndPort(addr string) (string, int32, error)

AddrConvertToIpAndPort 将地址字符串转换为 IP 和端口。 addr: 地址字符串,格式为 "IP:Port"。 返回值:IP、端口和错误信息。

func ArrayIndexof

func ArrayIndexof[T ArrayT](array []T, v T) int

ArrayIndexof 在数组中查找指定值,返回索引,-1 表示未找到。

func ArraySelectArray

func ArraySelectArray[T ArrayT](arr1, arr2 []T) bool

ArraySelectArray 判断 arr2 中的任意元素是否存在于 arr1 中。

func ArrayToString

func ArrayToString(arrays []string) string
[9 9 8 4 2 9 1 7 - a 5 4 b - 3 3 1 6 - c d f 3 - 8 7 d 9 f b 5 7] -> "99842917-a54b-3316-cdf3-87d9fb57"

ArrayToString 将字符串数组拼接为一个字符串。

func BytesToString

func BytesToString(b []byte) string

BytesToString 将字节数组转换为字符串。

func ConvertInt32

func ConvertInt32(a interface{}) int32

ConvertInt32 将任意支持的类型转换为 int32。

func ConvertInt64

func ConvertInt64(a interface{}) int64

ConvertInt64 将任意支持的类型转换为 int64。

func CreateToken

func CreateToken(curtime int64, id uint64) string

CreateToken 根据当前时间和 ID 生成一个唯一的 MD5 token。

func CurrentDirectory

func CurrentDirectory() string

设置程序目录为当前目录

func FirstCaseToUpper

func FirstCaseToUpper(str string, first bool) string
first = false: "aaa_bbb_ccc" -> "aaaBbbCcc"
first = true: "aaa_bbb_ccc" -> "AaaBbbCcc"

FirstCaseToUpper 将下划线分隔的字符串转换为驼峰格式。

func Float32Abs

func Float32Abs(f float32) float32

Float32Abs 返回浮点数的绝对值。

func GetCurrTimeMillisecond

func GetCurrTimeMillisecond() int64

GetCurrTimeMillisecond 获取当前时间的毫秒时间戳。

func GetErrno

func GetErrno(err error) int

从错误中读取最后的errno

func GetError

func GetError(v any) error

获取对象的错误

func GetRandomIndex

func GetRandomIndex(rateNum int, data []int32) (int, bool)

GetRandomIndex 根据随机概率返回对应的下标。 rateNum: 概率总和,data: 各个概率值的数组。 返回值:下标和是否成功找到。

func GetResPath

func GetResPath() (result string)

获取资源目录

func GetSystemUserName

func GetSystemUserName() string

GetSystemUserName 获取当前系统用户的用户名。 获取失败时返回空字符串。

func GetTimeMillisecond

func GetTimeMillisecond(v int64) int64

GetTimeMillisecond 将纳秒时间转换为毫秒时间。

func GetTimeMillisecondT

func GetTimeMillisecondT(t time.Time) int64

GetTimeMillisecondT 获取指定时间的毫秒时间戳。

func GetTimeSecondT

func GetTimeSecondT(t time.Time) int64

GetTimeSecondT 获取指定时间的秒级时间戳。

func GlobalRandInit

func GlobalRandInit()

func IntArrayToString

func IntArrayToString[T ArrayT](arr []T, sub string) string

IntArrayToString 将数组转换为字符串,元素之间用指定分隔符连接。

func Max

func Max[T NumberT](a, b T) T

Max 返回两个数值中的较大值。

func MaxI32

func MaxI32(v1, v2 int32) int32

MaxI32 返回两个 int32 值中的较大值。

func MaxI64

func MaxI64(v1, v2 int64) int64

MaxI64 返回两个 int64 值中的较大值。

func Min

func Min[T NumberT](a, b T) T

Min 返回两个数值中的较小值。

func MinI32

func MinI32(v1, v2 int32) int32

MinI32 返回两个 int32 值中的较小值。

func MinI64

func MinI64(v1, v2 int64) int64

MinI64 返回两个 int64 值中的较小值。

func Rand

func Rand(x, y int32) int

Rand 在指定范围 [x, y] 内生成一个随机整数。

func SafeDelIU32

func SafeDelIU32(v1, v2 uint32) uint32

SafeDelIU32 安全地从 v1 中减去 v2,确保结果不小于 0。

func SendHttp

func SendHttp[T any](url string, data any, opts ...option) (result *T, reserr error)

SendHttp 发送 HTTP POST 请求,使用 JSON 格式传输数据。 支持通过 opts 参数自定义请求头(如 Bearer Token)。 T 为响应体的结构体类型,自动解析 JSON 响应到 T。 用法:SendHttp[RespType](url, reqData, SetToken("token"), SetHeader("X-Header", "v"))

func SendHttpByWWW

func SendHttpByWWW[T any](url string, data url.Values, opts ...option) (result *T, reserr error)

SendHttpByWWW 发送 HTTP POST 请求,使用 application/x-www-form-urlencoded 格式传输数据。 支持通过 opts 参数自定义请求头(如 Bearer Token)。 T 为响应体的结构体类型,自动解析 JSON 响应到 T。 用法:SendHttpByWWW[RespType](url, formData, SetToken("token"))

func SetHeader

func SetHeader(key, value string) option

SetHeader 返回一个设置自定义 Header 的 option。 用法:SendHttp(url, data, SetHeader("X-My-Header", "value"))

func SetToken

func SetToken(token string) option

SetToken 返回一个设置 Bearer Token 的 option。 用法:SendHttp(url, data, SetToken("your_token"))

func StackTrace

func StackTrace() string

StackTrace 获取当前 goroutine 的调用栈信息。 返回格式化后的调用栈字符串,便于调试。

func StringToBytes

func StringToBytes(s string) []byte

StringToBytes 将字符串转换为字节数组。

func StringToInt32Array

func StringToInt32Array(str string, sub string) []int32

StringToInt32Array 将字符串按分隔符转换为 int32 数组。

func StringToIntArray

func StringToIntArray(str string, sub string) []int

StringToIntArray 将字符串按分隔符转换为 int 数组。

func StringToUint64Array

func StringToUint64Array(str string, sub string) []uint64

StringToUint64Array 将字符串按分隔符转换为 uint64 数组。

Types

type ArrayT

type ArrayT interface {
	byte | int8 | int16 | int32 | int64 | int | uint16 | uint32 | uint64 | uint | string
}

ArrayT 泛型约束,支持的数组元素类型

type Error

type Error struct {
	//错误码 0表示成功
	ErrCode int32
	//错误信息
	Str string
	//低层错误对象
	Err error
	//错误信息的参数
	Param []interface{}
}

Error 表示一个错误对象,包含错误码、错误信息和子错误。

func NewError

func NewError(code int32, str string) *Error

NewError 创建一个新的 Error 对象。

func (Error) AppendMsg

func (e Error) AppendMsg(fmat string, param ...interface{}) error

AppendMsg 用于通用错误 追加服务器更多信息,客户端不会展示的.

func (*Error) Error

func (e *Error) Error() string

func (*Error) Is

func (this *Error) Is(target error) bool

func (Error) NewErr

func (e Error) NewErr(suberr error, param ...interface{}) error

延长错误信息

func (*Error) String

func (e *Error) String() string

func (*Error) Unwrap

func (e *Error) Unwrap() error

type GMap

type GMap map[string]string

func (GMap) Get

func (this GMap) Get(key string) (*String, bool)

获取数据

func (GMap) GetStruct

func (this GMap) GetStruct(key string, v encoding.BinaryUnmarshaler) error

GetStruct 获取数据填充结构

type JsonArray

type JsonArray []interface{}

func (JsonArray) GetArray

func (js JsonArray) GetArray(index int) JsonArray

func (JsonArray) GetIntArray

func (js JsonArray) GetIntArray() []int

func (JsonArray) GetMap

func (js JsonArray) GetMap(index int) JsonMap

func (JsonArray) GetString

func (js JsonArray) GetString(index int) *String

func (JsonArray) GetStringArray

func (js JsonArray) GetStringArray() []string

type JsonMap

type JsonMap map[string]interface{}

JsonMap 表示 JSON 对象的键值对映射。

func (JsonMap) Descriptor

func (js JsonMap) Descriptor() ([]byte, []int)

func (JsonMap) Get

func (js JsonMap) Get(key string) interface{}

Get 获取指定键的值。

func (JsonMap) GetArray

func (js JsonMap) GetArray(key string) JsonArray

返回一个JsonArray

func (JsonMap) GetArrayIfExist

func (js JsonMap) GetArrayIfExist(key string) JsonArray

返回一个JsonArray,错误返回空

func (JsonMap) GetBool

func (js JsonMap) GetBool(key string) bool

返回bool类型

func (JsonMap) GetFloat32

func (js JsonMap) GetFloat32(key string) float32

返回float32类型

func (JsonMap) GetInt32

func (js JsonMap) GetInt32(key string) int32

GetInt32 获取 int32 类型的值。

func (JsonMap) GetInt32Array

func (js JsonMap) GetInt32Array(key string) []int32

返回 []int32

func (JsonMap) GetInt32ArrayIfExist

func (js JsonMap) GetInt32ArrayIfExist(key string) []int32

返回[]iny32

func (JsonMap) GetInt32IfExist

func (js JsonMap) GetInt32IfExist(key string) int32

GetInt32IfExist 获取 int32 类型的值,如果键不存在则返回 -1。

func (JsonMap) GetInt64

func (js JsonMap) GetInt64(key string) int64

返回int64类型

func (JsonMap) GetInt64IfExist

func (js JsonMap) GetInt64IfExist(key string) int64

返回int64类型,如果没有该字段就返回-1

func (JsonMap) GetIntArray

func (js JsonMap) GetIntArray(key string) []int

返回[]int

func (JsonMap) GetMap

func (js JsonMap) GetMap(key string) JsonMap

返回一个JsonMap

func (JsonMap) GetString

func (js JsonMap) GetString(key string) *String

func (JsonMap) GetStringNode

func (js JsonMap) GetStringNode(key string) string

返回string

func (JsonMap) GetUInt16

func (js JsonMap) GetUInt16(key string) uint16

返回uint16类型

func (JsonMap) GetUInt32

func (js JsonMap) GetUInt32(key string) uint32

返回uint32类型

func (JsonMap) GetUInt64

func (js JsonMap) GetUInt64(key string) uint64

func (JsonMap) Marshal

func (js JsonMap) Marshal() (dAtA []byte, err error)

func (JsonMap) MarshalTo

func (js JsonMap) MarshalTo(dAtA []byte) (int, error)

func (JsonMap) Name

func (js JsonMap) Name() string

func (JsonMap) ProtoMessage

func (js JsonMap) ProtoMessage()

func (JsonMap) Reset

func (js JsonMap) Reset()

func (JsonMap) Size

func (js JsonMap) Size() (n int)

func (JsonMap) String

func (js JsonMap) String() string

func (JsonMap) Unmarshal

func (js JsonMap) Unmarshal(dAtA []byte) error

type Keyer

type Keyer interface {
	GetKey() interface{}
}

Keyer 接口,定义获取键的方法。

type MapList

type MapList struct {
	// contains filtered or unexported fields
}

MapList 是一个支持快速查找和有序遍历的容器。

func NewMapList

func NewMapList() *MapList

NewMapList 创建一个新的 MapList。

func (*MapList) Clear

func (mapList *MapList) Clear()

Clear 清空 MapList。

func (*MapList) Exists

func (mapList *MapList) Exists(data Keyer) bool

Exists 检查指定数据是否存在。

func (*MapList) Get

func (mapList *MapList) Get(key interface{}) interface{}

Get 根据键获取数据。

func (*MapList) Push

func (mapList *MapList) Push(data Keyer) bool

Push 添加数据到 MapList。 如果数据已存在,则返回 false。

func (*MapList) Remove

func (mapList *MapList) Remove(data Keyer)

Remove 移除指定数据。

func (*MapList) Size

func (mapList *MapList) Size() int

Size 返回 MapList 的大小。

func (*MapList) Walk

func (mapList *MapList) Walk(cb func(data Keyer) bool)

Walk 遍历 MapList,并对每个数据执行回调函数。 如果回调函数返回 false,则停止遍历。

func (*MapList) WalkAndRemove

func (mapList *MapList) WalkAndRemove(cb func(data Keyer) bool)

WalkAndRemove 遍历 MapList,并移除满足条件的数据。

type NumberT

type NumberT interface {
	int8 | int16 | int32 | int64 | int | byte | uint16 | uint32 | uint64 | uint | float32 | float64
}

NumberT 泛型约束,支持的数值类型

type SRand

type SRand struct {
	Sr *rand.Rand
	// contains filtered or unexported fields
}
var GlobalRand *SRand

func GetGlobalRand

func GetGlobalRand() *SRand

func NewSRand

func NewSRand(isLock bool) *SRand

func (*SRand) GetRandomIndex

func (sr *SRand) GetRandomIndex(rateNum int, data []int32) (int, bool)

得到随机概率下标-权重

func (*SRand) GetRandomIndex2

func (sr *SRand) GetRandomIndex2(len int) (int32, bool)

得到随机下标

func (*SRand) GetRandomValue

func (sr *SRand) GetRandomValue(data []int32) (int32, bool)

得到随机下标的值

func (*SRand) Happen

func (sr *SRand) Happen(weight, max int) bool

func (*SRand) Rand

func (sr *SRand) Rand(min, max int32) int32

Rand go的随机函数是半开区间,这里是全闭区间

func (*SRand) Rand2

func (sr *SRand) Rand2(max int32) int32

Rand2 半开区间

type String

type String struct {
	// contains filtered or unexported fields
}

String 提供字符串操作的封装。

func NewString

func NewString(s string) *String

NewString 创建一个新的 String 对象。

func NewStringAny

func NewStringAny(f interface{}) *String

NewStringAny 根据任意类型创建 String 对象。

func NewStringBool

func NewStringBool(b bool) *String

NewStringBool 根据布尔值创建 String 对象。

func NewStringFloat64

func NewStringFloat64(f float64) *String

NewStringFloat64 根据浮点数创建 String 对象。

func NewStringInt

func NewStringInt(i int) *String

NewStringInt 根据整数创建 String 对象。

func NewStringInt64

func NewStringInt64(i int64) *String

NewStringInt64 根据 int64 创建 String 对象。

func (*String) Append

func (str *String) Append(arg *String) *String

Append 拼接另一个 String 对象。

func (*String) AppendFloat64

func (str *String) AppendFloat64(f float64) *String

AppendFloat64 拼接浮点数。

func (*String) AppendInt

func (str *String) AppendInt(i int) *String

AppendInt 拼接整数。

func (*String) AppendInt64

func (str *String) AppendInt64(i int64) *String

AppendInt64 拼接 int64 类型的整数。

func (*String) AppendString

func (str *String) AppendString(arg string) *String

AppendString 拼接普通字符串。

func (*String) Clear

func (str *String) Clear() *String

Clear 清空字符串内容。

func (*String) Contains

func (str *String) Contains(chars string) bool
如果字符串包含指定内容,返回 true
例如: "strings insert chars"
   chars = "insert" -> true
   chars = "Insert" -> false
   chars = "key" -> false

Contains 判断字符串是否包含指定内容(区分大小写)。

func (*String) ContainsIgnoreCase

func (str *String) ContainsIgnoreCase(chars string) bool
如果字符串包含指定内容,返回 true,忽略大小写。
例如: "strings insert chars"
   chars = "insert" -> true
   chars = "Insert" -> true
   chars = "key" -> false

ContainsIgnoreCase 判断字符串是否包含指定内容(忽略大小写)。

func (*String) EndsWith

func (str *String) EndsWith(s string) bool
"123xxxbbb5990" -> "5990" = true

EndsWith 判断字符串是否以指定后缀结尾。

func (*String) Index

func (str *String) Index(chars string) int
abcdef -> e = 4

Index 返回指定内容在字符串中首次出现的位置。

func (*String) LastIndex

func (str *String) LastIndex(chars string) int
abcdef -> b = 1

LastIndex 返回指定内容在字符串中最后出现的位置。

func (*String) Len

func (str *String) Len() int
"123" -> 3

Len 返回字符串长度。

func (*String) Remove

func (str *String) Remove(index int) *String
"abc" -> 1 -> "ac"

Remove 移除指定索引处的字符。

func (*String) RemoveLast

func (str *String) RemoveLast() *String
"abc" -> "ab"

RemoveLast 移除字符串的最后一个字符。

func (*String) Replace

func (str *String) Replace(old, new string) *String
"%111%abc%987%" -> ("%", "$") -> "$111$abc$987$"

Replace 替换字符串中的指定内容。

func (*String) StartsWith

func (str *String) StartsWith(s string) bool
"123xxxbbb5990" -> "123x" = true

StartsWith 判断字符串是否以指定前缀开头。

func (*String) String

func (str *String) String() string

func (*String) Substring

func (str *String) Substring(beginIndex, endIndex int) *String
str := NewString("abcde")
str.Substring(0, 2)
return: "ab"

Substring 返回字符串的子串。

func (*String) SubstringBegin

func (str *String) SubstringBegin(beginIndex int) *String
str := NewString("abcde")
str.SubstringBegin(2)
return: "cde"

SubstringBegin 返回从指定索引开始的子串。

func (*String) SubstringEnd

func (str *String) SubstringEnd(endIndex int) *String
str := NewString("abcde")
str.SubstringEnd(3)
return: "abc"

SubstringEnd 返回从字符串开头到指定索引的子串。

func (*String) ToArray

func (str *String) ToArray() []string
"460364431014955c2483ec91230e5435" -> [4 6 0 3 6 4 4 3 1 0 1 4 9 5 5 c 2 4 8 3 e c 9 1 2 3 0 e 5 4 3 5]

ToArray 将字符串转换为字符数组。

func (*String) ToBool

func (str *String) ToBool() (bool, error)

func (*String) ToBoolV

func (str *String) ToBoolV() bool

func (*String) ToFloat

func (str *String) ToFloat() (float64, error)

func (*String) ToFloatV

func (str *String) ToFloatV() float64

func (*String) ToInt

func (str *String) ToInt() (int, error)
"12345" -> 12345

ToInt 将字符串转换为整数。

func (*String) ToInt64

func (str *String) ToInt64() (int64, error)

func (*String) ToInt64V

func (str *String) ToInt64V() int64

func (*String) ToIntV

func (str *String) ToIntV() int

func (*String) ToLower

func (str *String) ToLower() *String
"BBB" -> "bbb"

ToLower 将字符串转换为小写。

func (*String) ToString

func (str *String) ToString() string

ToString 返回字符串值。

func (*String) ToUint64

func (str *String) ToUint64() (uint64, error)

func (*String) ToUint64V

func (str *String) ToUint64V() uint64

func (*String) ToUpper

func (str *String) ToUpper() *String
"aaa" -> "AAA"

ToUpper 将字符串转换为大写。

func (*String) Trim

func (str *String) Trim() *String
" 123 " -> "123"
" 1 23 " -> "1 23"

Trim 去除字符串两端的空格。

type StringBuilder

type StringBuilder struct {
	// contains filtered or unexported fields
}

StringBuilder 提供高效的字符串拼接功能。

func NewStringBuilder

func NewStringBuilder() *StringBuilder

NewStringBuilder 创建一个空的 StringBuilder。

func NewStringBuilderCap

func NewStringBuilderCap(capnum int) *StringBuilder

NewStringBuilderCap 创建一个带初始容量的 StringBuilder。

func NewStringBuilderString

func NewStringBuilderString(str *String) *StringBuilder

NewStringBuilderString 根据给定字符串创建一个 StringBuilder。

func (*StringBuilder) Append

func (builder *StringBuilder) Append(s string) *StringBuilder

Append 添加字符串。

func (*StringBuilder) AppendFloat64

func (builder *StringBuilder) AppendFloat64(f float64) *StringBuilder

AppendFloat64 添加浮点数。

func (*StringBuilder) AppendInt

func (builder *StringBuilder) AppendInt(i int) *StringBuilder

AppendInt 添加整数。

func (*StringBuilder) AppendInt64

func (builder *StringBuilder) AppendInt64(i int64) *StringBuilder

AppendInt64 添加 int64 类型的整数。

func (*StringBuilder) AppendRune

func (builder *StringBuilder) AppendRune(s rune) *StringBuilder

AppendRune 添加单个字符。

func (*StringBuilder) AppendStrings

func (builder *StringBuilder) AppendStrings(ss ...string) *StringBuilder

AppendStrings 添加多个字符串。

func (*StringBuilder) Appendln

func (builder *StringBuilder) Appendln(s string) *StringBuilder

Appendln 添加字符串并换行。

func (*StringBuilder) Clear

func (builder *StringBuilder) Clear() *StringBuilder

Clear 清空 StringBuilder。

func (*StringBuilder) IsEmpty

func (builder *StringBuilder) IsEmpty() bool

IsEmpty 判断 StringBuilder 是否为空。

func (*StringBuilder) RemoveLast

func (builder *StringBuilder) RemoveLast() *StringBuilder

RemoveLast 移除最后一个字符。

func (*StringBuilder) Replace

func (builder *StringBuilder) Replace(old, new string) *StringBuilder

Replace 替换字符串中的指定内容。

func (*StringBuilder) ToString

func (builder *StringBuilder) ToString() string

ToString 返回拼接后的字符串。

type StringJson

type StringJson string

StringJson 表示 JSON 化的字符串。

func (StringJson) MarshalJSON

func (this StringJson) MarshalJSON() ([]byte, error)

MarshalJSON 实现 JSON 序列化。

func (*StringJson) UnmarshalJSON

func (this *StringJson) UnmarshalJSON(v []byte) error

UnmarshalJSON 实现 JSON 反序列化。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL