提起 Go 语言中的rune类型,相信大家对它并不陌生。虽然它并不常用,但在我的印象里,用得最多的就是用它来处理中文字符串截取。
没错,多语言的字符串处理就是rune的强项。
rune是 Go 的内置类型之一,占用4个字节,通常用于表示Unicode字符,它是int32的别名,所以它在所有方面和int32等价。
提起 Go 语言中的rune类型,相信大家对它并不陌生。虽然它并不常用,但在我的印象里,用得最多的就是用它来处理中文字符串截取。
没错,多语言的字符串处理就是rune的强项。
rune是 Go 的内置类型之一,占用4个字节,通常用于表示Unicode字符,它是int32的别名,所以它在所有方面和int32等价。
今天网上刷到一个网友的提问:在 Go 语言中两个 interface{} 可以比较吗?我想了一下,在我的项目中,几乎很少去直接比较两个interface{}类型的变量,但真要比较的话,答案是肯定的,两个interface{}肯定可以比较,但是多少得注意一下细节。随后,我就在网上查阅了相关资料,在这里和大家详细分享一下。
interface{}不仅仅用来表示接口,它是一个动态类型,可以用来表示任意类型,也有一个别名any。这里所说的比较是指用==或!=比较。
在官网Comparison operators中有这么一句话:
很多人都说init()函数在 Go 语言中是一种神奇的存在,那么它到底神奇在哪里呢?这里就来聊一聊在 Go 语言中 init() 函数的作用以及它的执行顺序。
顾名思义,init是英语单词"initialization"的缩写形式,意思是初始化的意思,用来执行一些初始化操作,它在入口函数main()之前执行,并且一个包中甚至一个文件中,可以有多个init()函数,没有参数和返回值。
话不多说,这里直接上代码验证一下:
在Go中所说的空结构体就是struct{},它是一种特殊的存在,可能你在项目中看到过,但并没有深入的了解它的应用场景,这里结合自己平时项目中的经验,介绍一下空结构体(struct{})的一些应用场景。
Go语言中的空结构体(struct{})是一种零内存占用的特殊类型,其所有实例可能共享同一内存地址(zerobase),它不包含任何字段,但却有很多应用场景。
紧接上文,这里就来验证一下,空结构体的内存地址是否相同,以及内存占用大小:
作为一个Go开发者,内存对齐是一个基础而又重要的概念,在日常项目中,我们经常希望提高程序性能和运行效率,那么了解Go语言中的内存对齐原理是必要的,帮助我们合理的定义结构体,编写出高效的应用程序。
先来看一个未经优化的结构体S1和一个优化后的结构体S2,并获取实际大小:
type S1 struct {
x int8 // 1个字节
y int64 // 8个字节
z int16 // 2个字节
}
type S2 struct {
x int8 // 1个字节
z int16 // 2个字节
y int64 // 8个字节
}
func main() {
fmt.Println(unsafe.Sizeof(S1{})) // output: 24
fmt.Println(unsafe.Sizeof(S2{})) // output: 16
}
在当今复杂的Web应用中,精细化的权限管理是保障系统安全的关键环节。PHP-Casbin 作为Casbin生态的PHP实现,凭借其灵活的模型支持和强大的扩展能力,已成为PHP开发者实现访问控制的首选工具。
PHP-Casbin 基于PERM(Policy/Effect/Request/Matcher)模型,抽象出通用的访问控制框架。
ACL、RBAC、ABAC等数十种权限模型。 有一天,突然在项目中看到有个clear的函数,还以为是本地定义的函数,但在本地却没有找到相关定义。鼠标放上那么一点,才发现是Go语言中内置的函数,恕我孤陋寡闻了。
于是,就在网上各种搜索准备一探究竟,才知道clear函数是Go1.21版本中引入的内置函数,一起被引入的还有max和min函数。
clear主要用于清理map和slice的,在此之前一直没有快速清理map和slice的办法,例如清空map中的元素往往需要通过for遍历并通过delete去删除元素。
越来越多的开发者开始使用Go语言开发,这其中不乏有PHP、Python、Java的,还有C和C++转Go的,技术功底可谓是鱼龙混杂、良莠不齐。无论是从小白入门还是直接上手做项目,如果要真正掌握一门编程语言,基本功早晚都要练的。
言归正传,在Go语言中有两个用来内存分配的内置函数:new和make。经历了很多项目,发现make的使用频率要远高于new,实际开发中make几乎是无可代替,之所以new的使用频率没那么高,是因为它有几种可以代替的编写方式。虽然都用于内存分配,但它们还是有一些区别,所以应用场景也各不相同。
new就是纯用来内存分配的,它返回的是被分配类型的指针,并初始化为该类型的零值。
苟日新,日日新,又日新。
生活从不眷顾因循守旧、满足现状者,从不等待不思进取、坐享其成者,而是将更多的机遇留给善于和勇于创新的人们。
在人工智能飞速发展的今天,无论是 AI 相关的技术,还是 AI 相关的产品,都是层出不穷、日新月异。
前有 ChatGPT 的横空出世,现有 DeepSeek 的后生可畏。
在人工智能(AI)飞速发展的今天,大语言模型(LLMs)百家争鸣、群英荟萃,AI已经成为人们茶余饭后必备的话题,更是人们工作、学习中必备的工具。
大语言模型(LLM)是一种利用大量数据训练的深度学习模型,旨在理解和生成人类语言。
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们