技术圈开发者交流群:

为什么 go.mod 中有两段 require 结构 ?

在 Go 项目中使用go mod作为依赖管理工具,go.mod文件是其核心配置文件。

一般情况下,go.mod的配置项主要有:module go require,大概结构如下:

module github.com/project/demo

go 1.24.0

require (
    github.com/gin-gonic/gin v1.10.1
    gorm.io/driver/sqlite v1.6.0
    gorm.io/gorm v1.30.1
)

require (
    github.com/bytedance/sonic v1.11.6 // indirect
    github.com/bytedance/sonic/loader v0.1.1 // indirect
    github.com/goccy/go-json v0.10.2 // indirect
    github.com/pelletier/go-toml/v2 v2.2.2 // indirect
    ... // 省略其他依赖
)
GoLang 06月18日 330

认识一下 Go 语言中的 rune 类型

提起 Go 语言中的rune类型,相信大家对它并不陌生。虽然它并不常用,但在我的印象里,用得最多的就是用它来处理中文字符串截取

没错,多语言的字符串处理就是rune的强项。

rune是 Go 的内置类型之一,占用4个字节,通常用于表示Unicode字符,它是int32的别名,所以它在所有方面和int32等价。

GoLang 06月15日 726

在 Go 语言中两个 interface{} 可以比较吗?

今天网上刷到一个网友的提问:在 Go 语言中两个 interface{} 可以比较吗?我想了一下,在我的项目中,几乎很少去直接比较两个interface{}类型的变量,但真要比较的话,答案是肯定的,两个interface{}肯定可以比较,但是多少得注意一下细节。随后,我就在网上查阅了相关资料,在这里和大家详细分享一下。

interface{}不仅仅用来表示接口,它是一个动态类型,可以用来表示任意类型,也有一个别名any。这里所说的比较是指用==!=比较。

在官网Comparison operators中有这么一句话:

PHP 06月12日 6784

Go 语言中 init() 函数是什么时候执行的?

很多人都说init()函数在 Go 语言中是一种神奇的存在,那么它到底神奇在哪里呢?这里就来聊一聊在 Go 语言中 init() 函数的作用以及它的执行顺序。

顾名思义,init是英语单词"initialization"的缩写形式,意思是初始化的意思,用来执行一些初始化操作,它在入口函数main()之前执行,并且一个包中甚至一个文件中,可以有多个init()函数,没有参数和返回值。

话不多说,这里直接上代码验证一下:

package main

import "fmt"

var initA = printA()

func init() {
    fmt.Println("run init 1")
}

func init() {
        fmt.Println("run init 2")
}

func printA() bool {
    fmt.Println("run a")
    return true
}

func main() {
    fmt.Println("run main")
}
GoLang 06月11日 5639

Go 中的空结构体的最佳实践

Go中所说的空结构体就是struct{},它是一种特殊的存在,可能你在项目中看到过,但并没有深入的了解它的应用场景,这里结合自己平时项目中的经验,介绍一下空结构体(struct{})的一些应用场景。

Go语言中的空结构体(struct{})是一种零内存占用的特殊类型,其所有实例可能共享同一内存地址(zerobase),它不包含任何字段,但却有很多应用场景。

紧接上文,这里就来验证一下,空结构体的内存地址是否相同,以及内存占用大小:

package main

import (
    "fmt"
    "unsafe"
)

type Empty struct{}

func main() {
    var e Empty
    var s struct{}

    fmt.Printf("e addr: %p, size: %d\n", &e, unsafe.Sizeof(e)) // output: e addr: 0x5800a0, size: 0
    fmt.Printf("s addr: %p, size: %d\n", &s, unsafe.Sizeof(s)) // output: s addr: 0x5800a0, size: 0
}
GoLang 06月08日 2114

Go 语言中的结构体内存对齐

作为一个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
}
GoLang 06月07日 1722

PHP-Casbin:现代化 PHP 应用的权限管理引擎

在当今复杂的Web应用中,精细化的权限管理是保障系统安全的关键环节。PHP-Casbin 作为Casbin生态的PHP实现,凭借其灵活的模型支持和强大的扩展能力,已成为PHP开发者实现访问控制的首选工具。

PHP-Casbin 基于PERM(Policy/Effect/Request/Matcher)模型,抽象出通用的访问控制框架。

  • 模型灵活‌:通过配置文件支持自定义访问控制模型,可动态调整权限策略。
  • 多模型支持‌:内置 超级用户 管理、角色继承等功能,支持多层权限控制,支持ACLRBACABAC等数十种权限模型。 ‌
  • 轻量化设计‌:默认仅处理授权逻辑,需配合其他组件完成身份认证(如OAuth)。
PHP 06月05日 762

认识 Go 语言中的 clear 函数

有一天,突然在项目中看到有个clear的函数,还以为是本地定义的函数,但在本地却没有找到相关定义。鼠标放上那么一点,才发现是Go语言中内置的函数,恕我孤陋寡闻了。

于是,就在网上各种搜索准备一探究竟,才知道clear函数是Go1.21版本中引入的内置函数,一起被引入的还有maxmin函数。

GoLang 05月01日 730

Golang 中 new 与 make 的区别及适用场景

越来越多的开发者开始使用Go语言开发,这其中不乏有PHPPythonJava的,还有CC++Go的,技术功底可谓是鱼龙混杂、良莠不齐。无论是从小白入门还是直接上手做项目,如果要真正掌握一门编程语言,基本功早晚都要练的。

言归正传,在Go语言中有两个用来内存分配的内置函数:newmake。经历了很多项目,发现make的使用频率要远高于new,实际开发中make几乎是无可代替,之所以new的使用频率没那么高,是因为它有几种可以代替的编写方式。虽然都用于内存分配,但它们还是有一些区别,所以应用场景也各不相同。

GoLang 04月30日 1090

排行

解决方案

网站建设

专业企业官网建设,塑造企业形象,传递企业价值

系统开发

系统软件开发,用心思考,用心设计,用心体验

技术支撑

打破技术瓶颈,让不堪重负的项目起死回生

业务中台

构建全渠道一体化运营能力,实现全链路数字化

文案策划

文案撰写、营销策划,专注品牌全案

新媒体运营

一站式解决企业互联网营销痛点和难题

以技术的力量,改变互联网

联系我们
鄂ICP备19028750号-1 @copyright 2025 tech1024.com