golang表,gogolang

发布时间:2022-11-28

本文目录一览:

  1. 如何用golang在mysql的表格创建自定义的字段
  2. golang map源码浅析
  3. (十一)golang 内存分析
  4. Golang 公共变量包——expvar
  5. golangmysql可扩展分表代码
  6. 知识分享之Golang——精选的组件库、组件列表,各种golang组件都可找到

如何用golang在mysql的表格创建自定义的字段

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
// sql to create table
$sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}
$conn->close();

golang map源码浅析

Go 中的 map 是通过 哈希表 + 链表 实现的。当发生哈希冲突时,使用拉链法生成节点。

  • []bmap 是一个哈希表,每个 bmap 被称为“桶”。
  • 一个 bmap 最多可以存放 8 个元素,超过后会生成新的节点并链接到当前桶的尾部。

bmap 的内存模型

  • key 和 value 是分别存储的,而不是交替存储。
  • 这样设计的好处是可以在某些情况下省略 padding 字段,节省内存空间。

map 的创建

通过调用 makemap 创建 map,它会初始化 hmap 中的字段,如设置 B 的大小和哈希种子。

  • makemap 返回的是 *hmap 指针,说明 map 是引用类型,操作会影响结构体内部。

map 的 key 定位

  • key 经过哈希计算后,得到 64 位的 hash 值。
  • B 位用于定位桶,高 8 位为 tophash
  • 定位过程是双重循环:外层遍历 overflow 链表,内层遍历当前 bmap 中的 8 个元素。

扩容机制

  • 当元素过多时,map 会扩容。
  • 扩容分为等量扩容和双倍扩容。
  • 双倍扩容后,旧桶中的元素会被分配到新桶的两个部分(高位和低位)。

(十一)golang 内存分析

Go 的内存分配器原理类似于 tcmalloc,其核心思想是:

  • 维护一块大的全局内存;
  • 每个线程维护一块小的私有内存;
  • 私有内存不足时再从全局申请。

内存区域划分

  • spans:存放 span 的指针,每个指针对应一个 page;
  • bitmap:用于垃圾回收;
  • arena:堆区,应用程序的内存从这里分配。

内存管理结构

  • span:管理一个或多个页;
  • mcentral:全局资源,管理多个 span;
  • mcache:线程私有资源,缓存 span;
  • mheap:全局内存管理器。

内存分配策略

根据对象大小不同,分配策略也不同:

  • Tiny 分配:小于 16B 且不包含指针的对象;
  • 正常分配:16B 到 32KB 的对象;
  • 大对象分配:大于 32KB 的对象。

Golang 公共变量包——expvar

expvar 是 Go 官方提供的公共变量包,用于调试全局变量,支持以下类型:

  • float64
  • int64
  • Map
  • String

特性

  • 提供 /debug/vars 接口,可以查看所有注册的变量;
  • 适用于简单变量类型,如整型、字符串等。

golangmysql可扩展分表代码

go-mysql-server 是一个 SQL 引擎,支持解析标准 SQL(基于 MySQL 语法),并提供与 MySQL 协议兼容的服务器实现。

分库分表策略

  • 垂直分库:将不同业务的数据放到不同的服务器中;
  • 水平分表:将单表数据分散到多个物理节点中,解决单表数据量过大的问题。

知识分享之Golang——精选的组件库、组件列表,各种golang组件都可找到

awesome-go 是一个精选的 Go 框架、库和软件的汇总表,包含各种常用的 Go 组件。

用途

  • 快速查找 Go 相关组件;
  • 学习和使用 Go 的最佳实践;
  • 适用于日常开发和项目构建。

如需了解更多 Go 相关内容,欢迎持续关注本系列文章。