GoFrame框架封装了一些常用的数据类型以及对象获取方法,通过g.*方法获取。

g是一个强耦合的模块,目的是为开发者在对频繁使用的类型/对象调用时提供便利。

使用方式

import "github.com/gogf/gf/v2/frame/g"

数据类型

常用数据类型别名。

type (
	Var = gvar.Var        // Var is a universal variable interface, like generics.
	Ctx = context.Context // Ctx is alias of frequently-used context.Context.
)

type (
	Map        = map[string]interface{}      // Map is alias of frequently-used map type map[string]interface{}.
	MapAnyAny  = map[interface{}]interface{} // MapAnyAny is alias of frequently-used map type map[interface{}]interface{}.
	MapAnyStr  = map[interface{}]string      // MapAnyStr is alias of frequently-used map type map[interface{}]string.
	MapAnyInt  = map[interface{}]int         // MapAnyInt is alias of frequently-used map type map[interface{}]int.
	MapStrAny  = map[string]interface{}      // MapStrAny is alias of frequently-used map type map[string]interface{}.
	MapStrStr  = map[string]string           // MapStrStr is alias of frequently-used map type map[string]string.
	MapStrInt  = map[string]int              // MapStrInt is alias of frequently-used map type map[string]int.
	MapIntAny  = map[int]interface{}         // MapIntAny is alias of frequently-used map type map[int]interface{}.
	MapIntStr  = map[int]string              // MapIntStr is alias of frequently-used map type map[int]string.
	MapIntInt  = map[int]int                 // MapIntInt is alias of frequently-used map type map[int]int.
	MapAnyBool = map[interface{}]bool        // MapAnyBool is alias of frequently-used map type map[interface{}]bool.
	MapStrBool = map[string]bool             // MapStrBool is alias of frequently-used map type map[string]bool.
	MapIntBool = map[int]bool                // MapIntBool is alias of frequently-used map type map[int]bool.
)

type (
	List        = []Map        // List is alias of frequently-used slice type []Map.
	ListAnyAny  = []MapAnyAny  // ListAnyAny is alias of frequently-used slice type []MapAnyAny.
	ListAnyStr  = []MapAnyStr  // ListAnyStr is alias of frequently-used slice type []MapAnyStr.
	ListAnyInt  = []MapAnyInt  // ListAnyInt is alias of frequently-used slice type []MapAnyInt.
	ListStrAny  = []MapStrAny  // ListStrAny is alias of frequently-used slice type []MapStrAny.
	ListStrStr  = []MapStrStr  // ListStrStr is alias of frequently-used slice type []MapStrStr.
	ListStrInt  = []MapStrInt  // ListStrInt is alias of frequently-used slice type []MapStrInt.
	ListIntAny  = []MapIntAny  // ListIntAny is alias of frequently-used slice type []MapIntAny.
	ListIntStr  = []MapIntStr  // ListIntStr is alias of frequently-used slice type []MapIntStr.
	ListIntInt  = []MapIntInt  // ListIntInt is alias of frequently-used slice type []MapIntInt.
	ListAnyBool = []MapAnyBool // ListAnyBool is alias of frequently-used slice type []MapAnyBool.
	ListStrBool = []MapStrBool // ListStrBool is alias of frequently-used slice type []MapStrBool.
	ListIntBool = []MapIntBool // ListIntBool is alias of frequently-used slice type []MapIntBool.
)

type (
	Slice    = []interface{} // Slice is alias of frequently-used slice type []interface{}.
	SliceAny = []interface{} // SliceAny is alias of frequently-used slice type []interface{}.
	SliceStr = []string      // SliceStr is alias of frequently-used slice type []string.
	SliceInt = []int         // SliceInt is alias of frequently-used slice type []int.
)

type (
	Array    = []interface{} // Array is alias of frequently-used slice type []interface{}.
	ArrayAny = []interface{} // ArrayAny is alias of frequently-used slice type []interface{}.
	ArrayStr = []string      // ArrayStr is alias of frequently-used slice type []string.
	ArrayInt = []int         // ArrayInt is alias of frequently-used slice type []int.
)

常用对象

常用对象往往通过单例模式进行管理,可以根据不同的单例名称获取对应的对象实例,并在对象初始化时会自动检索获取配置文件中的对应配置项,具体配置项请查看对应对象的章节介绍。

注意事项:在运行时阶段,每一次通过g模块获取单例对象时都会有内部全局锁机制来保证操作和数据的并发安全性,原理性上来讲在并发量大的场景下会存在锁竞争的情况,但绝大部分的业务场景下开发者均不需要太在意锁竞争带来的性能损耗。此外,开发者也可以通过将获取到的单例对象保存到特定的模块下的内部变量重复使用,以此避免运行时锁竞争情况。

HTTP客户端对象

func Client() *ghttp.Client

创建一个新的HTTP客户端对象。

Validator校验对象

func Validator() *gvalid.Validator

创建一个新的数据校验对象。

(单例) 配置管理对象

func Cfg(name ...string) *gcfg.Config

该单例对象将会自动按照文件后缀toml/yaml/yml/json/ini/xml/properties文自动检索配置文件。默认情况下会自动检索以下配置文件:

  • config
  • config.toml
  • config.yaml
  • config.yml
  • config.json
  • config.ini
  • config.xml
  • config.properties

并缓存,配置文件在外部被修改时将会自动刷新缓存。

为方便多文件场景下的配置文件调用,简便使用并提高开发效率,单例对象在创建时将会自动使用单例名称进行文件检索。例如:g.Cfg("redis")获取到的单例对象将默认会自动检索以下文件:

  • redis
  • redis.toml
  • redis.yaml
  • redis.yml
  • redis.json
  • redis.ini
  • redis.xml
  • redis.properties

如果检索成功那么将该文件加载到内存缓存中,下一次将会直接从内存中读取;当该文件不存在时,则使用默认的配置文件(config.toml)。

(单例) 日志管理对象

func Log(name ...string) *glog.Logger

该单例对象将会自动读取默认配置文件中的logger配置项,并只会初始化一次日志对象。

(单例) 模板引擎对象

func View(name ...string) *gview.View

该单例对象将会自动读取默认配置文件中的viewer配置项,并只会初始化一次模板引擎对象。内部采用了懒初始化设计,获取模板引擎对象时只是创建了一个轻量的模板管理对象,只有当解析模板文件时才会真正初始化。

(单例) WEB Server

func Server(name ...interface{}) *ghttp.Server

该单例对象将会自动读取默认配置文件中的server配置项,并只会初始化一次Server对象。

(单例) TCP Server

func TcpServer(name ...interface{}) *gtcp.Server

(单例) UDP Server

func UdpServer(name ...interface{}) *gudp.Server

(单例) 数据库ORM对象

func DB(name ...string) *gdb.Db

该单例对象将会自动读取默认配置文件中的database配置项,并只会初始化一次DB对象。

此外,可以通过以下方法在默认数据库上创建一个Model对象:

func Model(tables string, db ...string) *gdb.Model

(单例) Redis客户端对象

func Redis(name ...string) *gredis.Redis

该单例对象将会自动读取默认配置文件中的redis配置项,并只会初始化一次Redis对象。

(单例) 资源管理对象

func Res(name ...string) *gres.Resource

(单例) 国际化管理对象

func I18n(name ...string) *gi18n.Manager





Content Menu

  • No labels

9 Comments

  1. 新人看了,感觉文档好乱,都不知道这是版本几的文档,有人能说下不?

    1. 这个页面应该是1.x的文档,看日期的话

  2. FAQ: 常用数据类型别名,Slice 与 Array 的对应类型一样,Slice Array 同时存在的意义是?

  3. 这里说的单例 是只整个程序里面的单例么

    还是说是对象池的概念,保证不会拿到同一个对象

    如果是前者的话框架是怎么判断unlock的?

  4. 不支持 map[string][ ]interface这种类型吗,好多地方用到,对应不上{}

  5. 小白看了想打退堂鼓

    1. 你不要当成一个框架学, 就当成一个又一个组件学, 就好容易. 我用到什么就看什么. 要不太多资料. 

      1. 这个g.* 对象, 只是对这些常用的组件, 二次封装, 方便调用而已.