# Store
> 返回一个持久化的数据结构，用于存储和操作带 key 的值，作用域为当前短代码。
- 官方英文原文：https://gohugo.io/methods/shortcode/store/
- 本页规范地址：https://hugozh.cn/methods/shortcode/store/
- 最近更新：2026-10-02
- 最后提交：1dab96f fix(seo): 按线上审计修 P1/P2——修 6 条 camelCase 死链、标题带上级章节（40 组重复→0）、JSON-LD 补 author/image/mainEntityOfPage 且章节页改 CollectionPage、API 页描述补签名、禁用空分类法、RSS 限流 50 条、404 noindex、页脚 logo 补 height、补 twitter 与 og:image 尺寸；新增大小写敏感链接检查器
- 签名：SHORTCODE.Store
- 返回类型：maps.Scratch
- 站点：Hugo 中文文档（https://hugozh.cn/）· 社区维护的非官方中文翻译，如有出入以官方英文原文为准

---
**（0.139.0 新增）**

用 `Store` 方法可以创建一个持久化的数据结构，用于存储和操作带 key 的值，作用域为当前短代码。要创建其他[作用域](g)的数据结构，请参见下面的[作用域](#作用域)一节。

> [!NOTE]
> 随着 [`newScratch`][] 函数的引入，以及初始化之后[给模板变量赋值][]的能力，短代码中的 `Store` 方法基本已经过时了。

## 方法

在数据结构上使用这些方法。

`Set`
: 设置给定 key 的值。

  ```go-html-template
  {{ .Store.Set "greeting" "Hello" }}
  ```

`Get`
: （`any`）获取给定 key 的值。

  ```go-html-template
  {{ .Store.Set "greeting" "Hello" }}
  {{ .Store.Get "greeting" }} → Hello
  ```

`Add`
: 把给定值加到给定 key 的现有值上。

  对于单个值，`Add` 接受支持 Go 的 `+` 运算符的值。如果对某个 key 的第一次 `Add` 操作是数组或切片，后续的 add 会追加到该列表中。

  ```go-html-template
  {{ .Store.Set "greeting" "Hello" }}
  {{ .Store.Add "greeting" "Welcome" }}
  {{ .Store.Get "greeting" }} → HelloWelcome
  ```

  ```go-html-template
  {{ .Store.Set "total" 3 }}
  {{ .Store.Add "total" 7 }}
  {{ .Store.Get "total" }} → 10
  ```

  ```go-html-template
  {{ .Store.Set "greetings" (slice "Hello") }}
  {{ .Store.Add "greetings" (slice "Welcome" "Cheers") }}
  {{ .Store.Get "greetings" }} → [Hello Welcome Cheers]
  ```

`SetInMap`
: 接受 `key`、`mapKey` 和 `value`，并把由 `mapKey` 和 `value` 构成的映射加入给定的 `key`。

  ```go-html-template
  {{ .Store.SetInMap "greetings" "english" "Hello" }}
  {{ .Store.SetInMap "greetings" "french" "Bonjour" }}
  {{ .Store.Get "greetings" }} → map[english:Hello french:Bonjour]
  ```

`DeleteInMap`
: 接受 `key` 和 `mapKey`，并从给定的 `key` 中移除 `mapKey` 对应的映射。

  ```go-html-template
  {{ .Store.SetInMap "greetings" "english" "Hello" }}
  {{ .Store.SetInMap "greetings" "french" "Bonjour" }}
  {{ .Store.DeleteInMap "greetings" "english" }}
  {{ .Store.Get "greetings" }} → map[french:Bonjour]
  ```

`GetSortedMapValues`
: （`[]any`）返回 `key` 中的值数组，按 `mapKey` 排序。

  ```go-html-template
  {{ .Store.SetInMap "greetings" "english" "Hello" }}
  {{ .Store.SetInMap "greetings" "french" "Bonjour" }}
  {{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
  ```

`Delete`
: 移除给定的 key。

  ```go-html-template
  {{ .Store.Set "greeting" "Hello" }}
  {{ .Store.Delete "greeting" }}
  ```

## 作用域

用于创建该数据结构的方法或函数决定了它的作用域。例如，用 `Page` 对象上的 `Store` 方法创建的数据结构，其作用域就是该页面。

作用域|方法或函数
:--|:--
page|[`PAGE.Store`][]
site|[`SITE.Store`][]
global|[`hugo.Store`][]
local|[`collections.NewScratch`][]
shortcode|[`SHORTCODE.Store`][]

[`PAGE.Store`]: /methods/page/store/
[`SHORTCODE.Store`]: /methods/shortcode/store/
[`SITE.Store`]: /methods/site/store/
[`collections.NewScratch`]: /functions/collections/newscratch/
[`hugo.Store`]: /functions/hugo/store/

[`newScratch`]: /functions/collections/newscratch/
[给模板变量赋值]: https://go.dev/doc/go1.11#texttemplatepkgtexttemplate

