Golang 内置函数:make()
是 语言内存分配的内置函数,默认有三个参数。 :数据类型,必要参数, 的值只能是 、 、 这三种数据类型。 :数据类型实际占用的内存空间长度, 、 是可选参数, 是必要参数。 :为数据类型提前预留的内存空间长度,可选参数。所谓的提前预留是当前为数据类型申请内存空间的时候,提前申请好额外的内存空间,这样可以避免二次分配内存带来的开销,大大提高程序的性能。 为了能更好的理解这些参数的含义,我们先来看下 的三种不同用法: 第一种,只传类型,不...
Golang面试题:new 和 make 有什么区别
今天我们来聊聊一个大家面试中经常遇到的问题:Golang 中的 new 和 make 到底有什么区别?这两货看起来名字差不多,但用法和场景可大不一样。为了方便大家理解,我来掰扯掰扯。 先说 new 这个函数名字虽然简单,但功能还挺关键。new 是 Go 语言的内置函数,它的作用就是分配内存,然后返回指向该内存地址的指针。 通俗点讲,new 干的事情就是帮你“造个房子”,不过它不负责装修,也就是只提供一个空的空间。这就意味着你通过 new...
Go1.23 新特性:新标准库 unique,性能更好,开销更小!
Go1.23 吵来吵去的,现在已经基本尘埃落定了。在我开始写这个新版本特性系列时,Go1.23 rc2 已经发布了有一周多: 今天我们分享的是新的标准库 unique 的介绍和快速入门。 背景 基于 Go unique 官方提案,我简化了一下内容。要做这个主要原因是:Go 缺乏运行时的驻留支持,这与其他语言存在差距。 多年来,Go 社区对弱映射(weak map)和字符串驻留(string interning)的需求已在过去几年的 Gi...
10 个提高生产力的 Go 小技巧
1\. 计时技巧 如果你对跟踪函数的执行时间感兴趣,或者在排查问题时需要使用。 可以在 Go 中可以使用 关键字,只需一行代码即可实现一个非常简单、高效的技巧。 你只需要一个 TrackTime 函数: \ 1.5 两阶段 Defer Go 的 defer 的强大之处不仅在于任务完成后的清理工作;它也在于为任务做准备。 考虑以下情况场景: \ 这种模式的美妙之处?只需一行代码,你就可以实现如下任务: 打开数据库连接,稍后关闭它 设置模拟...
Golang 中 []byte 与 string 转换
类型和 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。 两种转换方式 标准转换 go 中 与 的互换,相信每一位 gopher 都能立刻想到以下的转换方式,我们将之称为标准转换。 强转换 通过 unsafe 和 reflect 包,可以实现另外一种转换方式,我们将之称为强转换(也常常被人称作黑魔法)。 性能对比 既然有两种转换方式,那么我们有必要对它们做性能对比。 测试结果如下...
go install和go get的区别_
go get 和 go install 的区别 先看结论: : 对 项目,添加,更新,删除 文件的依赖项(仅源码)。不执行编译。侧重应用依赖项管理。 : 在操作系统中安装 。不更改项目 文件。侧重可执行文件的编译和安装。 之前网上乱传的 。正确说法是, 后, 命令的使用方式发生了改变. 具体什么改变呢?请看官方说明: Starting in Go 1.17, installing executables with go get is d...
Go 字符串拼接6种,最快的方式 -- strings.builder
我们首先来了解一下 语言中 类型的结构定义,先来看一下官方定义: 是一个 位字节的集合,通常但不一定代表UTF 8编码的文本。string可以为空,但是不能为nil。 string的值是不能改变的 。 类型本质也是一个结构体,定义如下: 和 还是很相似的, 指针指向的是某个数组的首地址, 代表的就是数组长度。怎么和 这么相似,底层指向的也是数组,是什么数组呢?我们看看他在实例化时调用的方法: 入参是一个 类型的指针,从这我们可以看出 类...
Golang环境变量设置和查看工具
go env 作用 go env 是 Go 工具链中的一个命令,用于设置和查看当前 Golang 环境的相关信息,对于理解、编译和运行 Golang 程序非常有用。 go 提供的命令及 go 程序的编译运行都会使用到环境变量,如果未设置对应的环境变量,go 则会使用其默认设置。默认情况下,env 以 脚本(在Windows上是批处理文件)的形式打印环境变量。如果查看指定的一个或多个变量,每个变量的值会占用一行。 go env 常用的参数...
Go系列:结构体标签
结构体标签 标签定义 Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。 结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。键值对之间使用一个空格分隔,具体的格式如下: key会指定反射的解析方式,如下: json(JSON标签) orm(Beego标签)、gorm(GORM标签)、bson(MongoDB标签)、form(表单标签)、binding(表单验证标签) 标签选项 注...