All skills
gogf avatar

/goframe-v2

@911705d
by GoFramegogf/skills81 stars
3

GoFrame v2 development skill. Use only when the target Go project uses or is explicitly adopting GoFrame v2: the nearest go.mod requires github.com/gogf/gf/v2, existing Go files import github.com/gogf/gf/v2 or any github.com/gogf/gf/v2/... component package, or the user asks to scaffold, migrate, or build with GoFrame. Trigger for GoFrame-backed Go work such as APIs/controllers/services, middleware, routing/config, ORM/DAO/DO/entity/database operations, gf CLI/codegen, HTTP/gRPC services, and microservice conventions. Do not trigger for generic Go projects without GoFrame evidence, frontend-only work, shell scripts, or unrelated infrastructure tasks.

Use this Skill: https://skilld.dev/gh/gogf/skills/goframe-v2

This session only. Nothing lands on disk.

references核心组件模板引擎模板引擎-模板配置.md

视图组件是GoFrame框架核心的组件之一,当然也支持非常方便的配置管理功能。

配置对象

配置对象定义: https://pkg.go.dev/github.com/gogf/gf/v2/os/gview#Config

配置文件

视图组件支持配置文件,当使用g.View(单例名称)获取View单例对象时,将会自动通过默认的配置管理对象获取对应的View配置。默认情况下会读取viewer.单例名称配置项,当该配置项不存在时,将会读取viewer配置项。

完整配置文件配置项及说明如下,其中配置项名称不区分大小写:

[viewer]
    Paths       = ["/var/www/template"] # 模板文件搜索目录路径,建议使用绝对路径。默认为当前程序工作路径
    DefaultFile = "index.html"          # 默认解析的模板引擎文件。默认为"index.html"
    Delimiters  =  ["${", "}"]          # 模板引擎变量分隔符号。默认为 ["{{", "}}"]
    AutoEncode  = false                 # 是否默认对变量内容进行XSS编码。默认为false
    [viewer.Data]                       # 自定义的全局Key-Value键值对,将在模板解析中可被直接使用到
        Key1 = "Value1"
        Key2 = "Value2"

示例1,默认配置项

[viewer]
    paths       = ["template", "/var/www/template"]
    defaultFile = "index.html"
    delimiters  =  ["${", "}"]
    [viewer.data]
        name    = "gf"
        version = "1.10.0"

随后可以使用 g.View() 获取默认的单例对象时自动获取并设置该配置。

示例2,多个配置项

多个 View 对象的配置示例:

[viewer]
    paths       = ["template", "/var/www/template"]
    defaultFile = "index.html"
    delimiters  =  ["${", "}"]
    [viewer.data]
        name    = "gf"
        version = "1.10.0"
    [viewer.view1]
        defaultFile = "layout.html"
        delimiters  = ["${", "}"]
    [viewer.view2]
        defaultFile = "main.html"
        delimiters  = ["#{", "}"]

我们可以通过单例对象名称获取对应配置的 View 单例对象:

// 对应 viewer.view1 配置项
v1 := g.View("view1")
// 对应 viewer.view2 配置项
v2 := g.View("view2")
// 对应默认配置项 viewer
v3 := g.View("none")
// 对应默认配置项 viewer
v4 := g.View()

配置方法

方法列表: https://pkg.go.dev/github.com/gogf/gf/v2/os/gview

简要说明:

  1. 可以通过 SetConfig 及 SetConfigWithMap 来设置。
  2. 也可以使用 View 对象的 Set* 方法进行特定配置的设置。
  3. 主要注意的是,配置项在 View 对象执行视图解析之前设置,避免并发安全问题。

SetConfigWithMap 方法

我们可以使用 SetConfigWithMap 方法通过 Key-Value 键值对来设置/修改 View 的特定配置,其余的配置使用默认配置即可。其中 Key 的名称即是 Config 这个 struct 中的属性名称,并且不区分大小写,单词间也支持使用 -/ _/ 空格 符号连接,具体可参考 类型转换-Struct转换 章节转换规则。

简单示例:

package main

import (
    "context"
    "fmt"
    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/os/gview"
)

func main() {
    view := gview.New()
    view.SetConfigWithMap(g.Map{
        "Paths":       []string{"template"},
        "DefaultFile": "index.html",
        "Delimiters":  []string{"${", "}"},
        "Data": g.Map{
            "name":    "gf",
            "version": "1.10.0",
        },
    })
    result, err := view.ParseContent(context.TODO(), "hello ${.name}, version: ${.version}")
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}

其中 DefaultFile 表示默认解析的模板文件,键名也可以使用 defaultFile, default-File, default_file, default file,其他配置属性以此类推。

注意事项

经常有小伙伴问,为神马我的模板解析没有生效?为神马页面上直接将我写的标签原木原样显示出来了?

这个时候请检查你的配置文件中是否有设置模板标签,常见的是 delimiters 设置为了 ["${", "}"],但是模板中使用的是 ["{{", "}}"]。

Source: SKILL.md on GitHub

1 alert16d5 checks · Risk MEDIUM
  • Gen Agent Trust Hub16d

    The skill provides a comprehensive development guide and code examples for the GoFrame v2 framework. While highly informative for Go developers, it contains several examples with hardcoded placeholder secrets, tokens, and specific local file paths to sensitive configuration files (like Kubernetes credentials). These elements are provided for demonstration purposes but represent insecure practices if used in production without modification.

  • Socket16d

    5 alerts: gptSecurity, gptAnomaly

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    227/949 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 911705d. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 4 months ago.

Steadyupdated 4 months ago
  • Go
  • Database
  • goframe
  • orm
  • http
  • grpc
  • microservices
  • crud
  • scaffolding
  • middleware

README badge

README badge for gogf/skills

Provides instruction and conventions for developing with GoFrame v2, a modular Go framework for building HTTP and gRPC services, microservices, and database operations using its ORM, CLI tooling, and project scaffolding. Use this skill when the target project has GoFrame v2 as a dependency or when the user requests scaffolding, migrations, or service development with GoFrame conventions.

Generated from the current SKILL.md.

When should I use this skill?
Use this skill only when your Go project uses GoFrame v2, indicated by github.com/gogf/gf/v2 in go.mod or imports. Do not use for generic Go projects, frontend work, or infrastructure tasks unrelated to GoFrame.
Should I manually set created_at and updated_at fields?
No. GoFrame automatically writes created_at on insert and updated_at on insert/update/save. Manually setting these fields is redundant and violates project conventions.
What should I use for database operations instead of g.Map?
Always use DO objects from internal/model/do/. DO struct fields are interface{}, unset fields remain nil and are automatically ignored by the ORM.
How does soft delete work in GoFrame?
Call Delete() on the DAO; GoFrame automatically converts it to UPDATE SET deleted_at = NOW(). Queries automatically filter out soft-deleted rows without requiring manual WhereNull conditions.
Where should I implement business logic?
Implement business logic directly in the service/ directory. Do not use the logic/ directory unless explicitly requested.

Generated from the current SKILL.md. These answers refresh after source changes.