技术圈开发者交流群:

Go 语言 select{} 如何保证每个 case 均等的执行机会?

在 Go 语言高并发编程中,select语句就像是站在十字路口的交通指挥员。当多个channel(通道)同时向程序发出信号(发送或接收数据就绪时),select必须公平、迅速地决定哪条道路通行。这个“公平”体现在哪里?

核心就在于:当多个case同时就绪时,每个case被选中的概率是均等的,防止任何通道被“饿死”。今天我们就来揭秘它背后的“公平调度”原理。

GoLang 06月28日 6724

gops:Go开发者的“听诊器”与“透视镜”

在 Go 语言生态中,有一款被众多资深工程师称为“生产环境救星”的工具——gops(Go Process Status)。它由 Google Go 团队开发,专为解决 Go 服务在真实场景中的“黑盒”困境而生。本文将深入解析其核心价值、典型应用场景及实战技巧。

核心定位

GoLang 06月27日 2142

Go 哲学,为什么 nil 接口不等于 nil ?

Go 语言是一门充满学问的语言,开发者如果不充分了解这些学问,一不小心就会掉入“陷阱”,这里来分享一个经典的nil != nil的问题。

在 Go 语言中,"接口值为 nil 但不等于 nil" 的现象源于接口类型独特的底层表示结构。

这看似矛盾的现象可以通过理解接口的内部实现来理解。

Go 语言的接口变量实际上由两个属性构成:

GoLang 06月25日 1070

使用 Go 语言如何处理大小端字节序?

在 Go语言中,字节序(Endianness)是处理多字节数据类型(如int32、uint64等)在内存存储或网络传输时字节排列顺序的核心概念。Go通过标准库encoding/binary提供对大小端序的完整支持。

其实,我第一次知道字节序还是在五年前,当时是需要和一位C/C++大佬做TCP数据对接,在大佬的指导下,才对字节序有了一定的了解,除此之外就很少接触要使用字节序的场景。

GoLang 06月23日 732

Go 语言中的 [...]int{...} 是什么意思?

在 Go 语言中要初始化一个数组可有很多种方式,可以直接指定长度不指定元素var arr [5]int,也可以显示初始化数组指定长度并赋值arr := [5]int{1, 2, 3, 4, 5},还可以按索引指定部分索引的值arr := [5]int{0: 10, 3: 40}

但是刚刚刷到一道面试题,题目是这样的:

package main

import (
    "fmt"
)

func main() {
    m := [...]int{
        'a': 1,
        'b': 2,
        'c': 3,
    }
    m['a'] = 3
    fmt.Println(len(m))
}

问这段代码输出什么?

GoLang 06月21日 1066

为什么 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
    ... // 省略其他依赖
)

上面这个go.mod是通过go mod tidy整理后的,可以看出有两段require配置,require中列出了该项目所有的依赖项及其版本。

GoLang 06月18日 328

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

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

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

GoLang 06月15日 722

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

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

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

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

PHP 06月12日 6762

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日 5625

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

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

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

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

GoLang 06月08日 2110

排行

解决方案

网站建设

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

系统开发

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

技术支撑

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

业务中台

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

文案策划

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

新媒体运营

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

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

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