Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

attson/container

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于 golang 泛型实现的简单容器

  • 支持单例注册
  • 支持通过类型构建对象

使用示例

package main

import "github.com/attson/container"

type Test struct {
	Name string
}

func (t Test) Key() string {
	return t.Name
}

type I interface {
	Key() string
}

为结构体注册一个构建函数

// 为结构体注册一个构建函数
container.Register[Test](func() any {
    return Test{
        Name: "test",
    }
})
// 通过容器构建实例
v1 := container.Make[Test]()
println(v1.Name) // test

为结构体指针注册一个构建函数

// 为结构体指针注册一个构建函数
container.Register[*Test](func() any {
    return &Test{
        Name: "test_pointer",
    }
})
// 通过容器构建实例
v2 := container.Make[*Test]()
println(v2.Name) // test_pointer

为接口注册一个构建函数

// 为接口注册一个构建函数
container.Register[I](func() any {
    return Test{
        Name: "test_interface",
    }
})
// 通过容器构建实例
v3 := container.Make[I]()
println(v3.Key()) // test_interface

在容器中设置一个实例(单例)

// 在容器中设置一个实例(单例)
container.Set[Test](Test{
    Name: "test_set",
})
// 通过容器获取实例
v4 := container.Get[Test]()
println(v4.Name) // test_set
	

在容器中设置一个指针实例

// 在容器中设置一个指针实例
container.Set[*Test](&Test{
    Name: "test_pointer_set",
})
// 通过容器获取实例
v5 := container.Get[*Test]()
println(v5.Name) // test_pointer_set

在容器中设置一个接口实例

// 在容器中设置一个接口实例
container.Set[I](Test{
    Name: "test_interface_set",
})
// 通过容器获取实例
v6 := container.Get[I]()
println(v6.Key()) // test_interface_set

About

golang simple container

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.