<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Attic - Base</title>
    <link>https://tingyulou.top/forum.php?mod=forumdisplay&amp;fid=10</link>
    <description>Latest 20 threads of Base</description>
    <copyright>Copyright(C) Attic</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Wed, 06 May 2026 11:53:54 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>https://tingyulou.top/static/image/common/logo_88_31.gif</url>
      <title>Attic</title>
      <link>https://tingyulou.top/</link>
    </image>
    <item>
      <title>go语言格式化</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=341</link>
      <description><![CDATA[在 Go 语言中，格式化通常指的是使用 fmt 包中的格式化动词（verbs）来控制输出格式。这些动词以百分号 % 开头，后跟一个或多个字母（有时还有修饰符），用于指定如何格式化对应的参数。
以下是 Go 语言中常见格式化动词及其含义（按类型分类）：

通用动词（适用于任意 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 05:46:49 +0000</pubDate>
    </item>
    <item>
      <title>2. 变量声明</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=340</link>
      <description><![CDATA[概述

在声明变量之前，咱们先了解下变量的数据类型，这篇文章主要涉及 字符串、布尔、数字，其他类型后面开篇再说。

数据类型
字符串

string：只能用一对双引号（&amp;quot;&amp;quot;）或反引号（``）括起来定义，不能用单引号（\'\'）定义！

布尔

bool：只有 true 和 false，默认为 f ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:50:08 +0000</pubDate>
    </item>
    <item>
      <title>22. GPM 调度模型深度解析</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=339</link>
      <description><![CDATA[什么是 GPM 模型？
GPM 是 Go 语言并发调度器的核心模型，由三个关键组件组成：

G (Goroutine)：Go 的轻量级线程
P (Processor)：逻辑处理器，负责调度 Goroutine
M (Machine)：操作系统线程，真正执行计算的部分

这个模型是 Go 能够高效处理百万级并发的基础架构。
 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:49:40 +0000</pubDate>
    </item>
    <item>
      <title>21. 并发任务处理方案详解：从 WaitGroup 到 ErrorGroup</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=338</link>
      <description><![CDATA[在 Golang 中处理并发任务时，sync.WaitGroup 是最基础的同步原语，但随着需求复杂度增加，我们需要更强大的工具。本文将系统介绍从 sync.WaitGroup 到更高级的 errgroup.Group 的使用方法和适用场景。


sync.WaitGroup 深度解析


基本使用模式
sync.WaitGroup 适用于 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:49:17 +0000</pubDate>
    </item>
    <item>
      <title>20. Golang 中 Map 并发安全方案详解</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=337</link>
      <description><![CDATA[在 Golang 中处理并发 map 访问时，主要有两种方案：使用 sync.Map 或使用传统 map 配合互斥锁。我将详细介绍这两种方案及其使用场景。


使用 sync.Map


sync.Map 是 Go 1.9 引入的并发安全 map 实现，适用于以下场景：

读多写少的场景
需要高并发访问
不需要频繁计 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:48:55 +0000</pubDate>
    </item>
    <item>
      <title>19. Go逃逸分析深度解析与性能优化实践</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=336</link>
      <description><![CDATA[逃逸分析是 Go 编译器优化的重要环节，理解逃逸机制对于编写高性能 Go 程序至关重要。本文将全面介绍逃逸分析的原理、检测方法和优化技巧，并提供实际案例帮助开发者避免常见性能陷阱。


逃逸分析基础


堆与栈的内存分配差异



特性
栈分配
堆分配




分配速度
极快 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:48:33 +0000</pubDate>
    </item>
    <item>
      <title>18. sync.Pool 深度解析与高性能实践</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=335</link>
      <description><![CDATA[sync.Pool 是 Go 标准库中一个极其重要但常被误解的组件。本文将全面剖析 sync.Pool 的工作原理、适用场景和高级用法，帮助开发者正确高效地使用对象池优化程序性能。


sync.Pool 核心机制


底层实现原理
sync.Pool 采用多级缓存设计：

P-local 缓存：每个 P（逻辑处 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:48:06 +0000</pubDate>
    </item>
    <item>
      <title>17.  GO 高性能字符串和结构体操作指南</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=334</link>
      <description><![CDATA[字符串操作性能优化


问题分析
在 Go 中，使用 + 操作符或 fmt.Sprintf 进行字符串拼接会导致性能问题，因为：

字符串是不可变的，每次拼接都会创建新的字符串对象
频繁的内存分配和复制操作
随着拼接次数增加，性能会急剧下降

基准测试对比
// 1. 使用 + 操作符
f ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:47:30 +0000</pubDate>
    </item>
    <item>
      <title>16. 常用签名算法的基准测试</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=333</link>
      <description><![CDATA[签名验证是为了保证接口安全和识别调用方身份，同时还需要满足以下几点：

可变性：每次的签名必须是不一样的。
时效性：每次请求的时效性，过期作废。
唯一性：每次的签名是唯一的。
完整性：能够对传入数据进行验证，防止篡改。

签名规则大同小异，根据自己的业务情 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:46:55 +0000</pubDate>
    </item>
    <item>
      <title>15. time.RFC3339 时间格式化</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=332</link>
      <description><![CDATA[在开发过程中，我们有时会遇到这样的问题，将 2020-11-08T08:18:46+08:00 转成 2020-11-08 08:18:46，怎么解决这个问题？
解决这个问题，最好不要用字符串截取，或者说字符串截取是最笨的方法，这应该是时间格式化的问题。
我们先看一下 golang time 包中支持的 format  ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:46:30 +0000</pubDate>
    </item>
    <item>
      <title>14. 学习 grpc.Dial(target string, opts …DialOption) 的写法</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=331</link>
      <description><![CDATA[咱们平时是这样使用 grpc.Dial 方法的，比如：
conn, err := grpc.Dial(&amp;quot;127.0.0.1:8000&amp;quot;,
                grpc.WithChainStreamInterceptor(),
                grpc.WithInsecure(),
                grpc.WithBlock(),
                grpc.WithDisableRetry(),
   ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:46:05 +0000</pubDate>
    </item>
    <item>
      <title>13. 结构(struct) 实现 接口(interface)</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=330</link>
      <description><![CDATA[在 Go 语言中，一个 struct 实现了某个接口里的所有方法，就叫做这个 struct 实现了该接口。
下面写一个 Demo 实现一下，先写一个 Study interface{}，里面需要实现 4 个方法 Listen、Speak、Read、Write，然后再写一个 study struct{}，去全部实现里面的方法，然后分享 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:45:44 +0000</pubDate>
    </item>
    <item>
      <title>12.  json.Unmarshal 遇到的小坑</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=329</link>
      <description><![CDATA[问题现象描述


使用 json.Unmarshal()，反序列化时，出现了科学计数法，参考代码如下：
jsonStr := `{&amp;quot;number&amp;quot;:1234567}`
result := make(map[string]interface{})
err := json.Unmarshal([]byte(jsonStr), &amp;amp;result)
if err != nil {
        fmt.Println(err)
}
fmt ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:45:16 +0000</pubDate>
    </item>
    <item>
      <title>11. 解析 JSON 数据</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=328</link>
      <description><![CDATA[概述
今天给大家分享用 Go 如何解析 JSON 数据，包含三种情况，强类型解析、弱类型解析、返回结构不确定 等。
JSON 结构
比如，请求了手机归属地的接口，json 数据返回如下：
{
    &amp;quot;resultcode&amp;quot;: &amp;quot;200&amp;quot;,
    &amp;quot;reason&amp;quot;: &amp;quot;Return Successd!&amp;quot;,
    &amp;quot;result&amp;quot;: {
        &amp;quot;p ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:44:52 +0000</pubDate>
    </item>
    <item>
      <title>10. defer 函数</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=327</link>
      <description><![CDATA[概述
defer 函数大家肯定都用过，它在声明时不会立刻去执行，而是在函数 return 后去执行的。
它的主要应用场景有 异常处理、记录日志、清理数据、释放资源 等等。
这篇文章不是分享 defer 的应用场景，而是分享使用 defer 需要注意的点。
咱们先从一道题开始，一起来感 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:44:31 +0000</pubDate>
    </item>
    <item>
      <title>9. Go 通道(Channel)深度指南：从基础到高级实践</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=326</link>
      <description><![CDATA[通道基础概念


通道的本质
通道(chan)是 Go 语言中一种特殊的类型，它像一个先进先出(FIFO)的队列，用于协程(goroutine)之间的通信。通道的核心特性包括：

类型安全：通道有明确的元素类型
线程安全：通道操作是原子性的
阻塞机制：同步控制的关键

并发 vs 并行
理 ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:44:04 +0000</pubDate>
    </item>
    <item>
      <title>8. 函数</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=325</link>
      <description><![CDATA[概述
学习了一些基础语法，开始学习写函数了，分享下面几个函数。

MD5
获取当前时间戳
获取当前时间字符串
生成签名

函数定义
func function_name(input1 type1, input2 type2) (type1, type2) {
   // 函数体
   // 返回多个值
   return value1, value2
}


函数用  ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:43:40 +0000</pubDate>
    </item>
    <item>
      <title>7. 循环</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=324</link>
      <description><![CDATA[概述
前几篇文章分享了 array 数组、slice 切片、map 集合，这篇文章分享如何循环获取里面的元素，同时也是对前几篇文章的复习。
本篇文章会用到的关键字 for、range、break、continue、goto、switch。
循环 array
//demo_18.go
package main

import (
  &amp;quot;fmt&amp;quot;
)

func ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:43:25 +0000</pubDate>
    </item>
    <item>
      <title>6. Map 集合</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=323</link>
      <description><![CDATA[概述
Map 是 Go 语言中的键值对集合，也称为字典或哈希表。它具有以下特性：

无序存储（遍历顺序不固定）
键(key)必须是可比较的类型（不能是切片、map、函数等）
值(value)可以是任意类型
引用类型（传递时不会拷贝数据）

Map 的声明和初始化
package main

import  ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:42:42 +0000</pubDate>
    </item>
    <item>
      <title>5. Struct 结构体</title>
      <link>https://tingyulou.top/forum.php?mod=viewthread&amp;tid=322</link>
      <description><![CDATA[概述
结构体（Struct）是 Go 语言中用于组合多个字段的复合数据类型，每个字段都有其自己的类型和名称。
声明结构体
package main

import (
    &amp;quot;encoding/json&amp;quot;
    &amp;quot;fmt&amp;quot;
    &amp;quot;time&amp;quot;
)

// 基本结构体定义
type Person struct {
    Name      string
    Age        ...]]></description>
      <category>Base</category>
      <author>Kyle</author>
      <pubDate>Mon, 24 Nov 2025 02:42:07 +0000</pubDate>
    </item>
  </channel>
</rss>