Skip to content

Instantly share code, notes, and snippets.

@hxzhouh
hxzhouh / struct_copy.go
Created November 15, 2024 09:35
struct_copy demo
type printId interface {
print(id int)
}
type BufferWrapper struct {
buffer *bytes.Buffer
}
func NewBufferWrapper() *BufferWrapper {
return &BufferWrapper{}
}
@hxzhouh
hxzhouh / stack.go
Created November 15, 2024 08:15
stack & lock free stack
package lock_free
import (
"sync"
"sync/atomic"
"unsafe"
)
type StackInterface interface {
Push(any)
@hxzhouh
hxzhouh / jwe.go
Created October 16, 2024 12:03
jwe
func (gjt *GoJoseToken) GetRSAToken() (string, error) {
// Generate ED25519 key pair
data, err := os.ReadFile("ec_public.pem")
if err != nil {
log.Fatalf("Failed to read public key: %v", err)
}
pub, err := LoadPublicKey(data)
if err != nil {
log.Fatalf("Failed to load public key: %v", err)
}
@hxzhouh
hxzhouh / v5.go
Created October 15, 2024 02:07
jwt_v5 create a jwt token
import (
"blog-example/lib/jwt/inf"
"fmt"
"github.com/golang-jwt/jwt/v5"
"time"
)
type V5Token struct {
User inf.UserInfo
jwt.RegisteredClaims
@hxzhouh
hxzhouh / main.go
Created September 25, 2024 09:46
slice memory leak
func main() {
Demo1()
runtime.GC()
time.Sleep(1 * time.Second)
exit()
}
func exit() {
fmt.Println("Saving heap profile...")
// create a heap profile
f, err := os.Create("heap.pprof")
package limit_alg
import (
"sync"
)
// UserQuota
type UserQuota struct {
Quanity int
Limit int
// UserQuota
type UserQuota struct {
Quanity int
Limit int
mutex sync.Mutex
}
// QuotaManager Managing user credits
type QuotaManager struct {
users map[string]*UserQuota
package limit_alg
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
type RedisTokenBucket struct {
package limit_alg
import (
"sync"
"time"
)
type TokenBucket struct {
mu sync.Mutex
bucketSize int
type TokenBucket struct {
mu sync.Mutex
bucketSize int
capacity chan struct{}
interval time.Duration
refillRate int
}
func NewTokenBucket(capacity int, refillRate int, interval time.Duration) *TokenBucket {
tl := &TokenBucket{