技术圈开发者交流群:

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

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

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

new就是纯用来内存分配的,它返回的是被分配类型的指针,并初始化为该类型的零值

GoLang 2025年04月30日 1116

Java 和 Go 中接口实现的区别

在面向对象编程中,接口是一个重要概念,它是一种契约,它定义了对象应该具备的方法。一个接口可以有多重实现,它的所有实现都必须满足接口所有约定的方法。并不是所有编程语言都有接口,例如在CPythonRuby中是没有内置的接口机制,但在大多数编程语言中都有接口的概念,一般用interface来标记。

JavaGo都是有内置的接口的机制,但在接口实现上却不尽相同。这些区别主要是接口定义、接口实现、约束机制和应用场景等方面,下面就这些不同进行逐一比较。

两者在接口定义上区别不大,都是通过interface实现的。

GoLang 2025年02月04日 2128

如何在 Go 语言中接收和处理系统信号?

这里我们探讨的信号不是手机信号,也不是Wifi、蓝牙等信号。信号是 Linux、Unix以及其他 POSIX 兼容的操作系统中进程间通讯的一种机制,用于告知进程一个事件已经发生。

更准确的来说,这里所说的信号是在 Linux 系统中通过kill及其相关命令向指定进程发送的控制信号。在 Go 应用开发中,正确处理这些信号非常有必要。

在 Linux 操作系统中系统信号很多类型,这里简要列一些常用的系统信号:

GoLang 2025年01月19日 1102

Go 并发编程中的非阻塞锁:TryLock()

在使用 Golang 做并发编程的过程中,是开发中必不可少的工具之一,它可以避免多协程对共享资源的并发读写,通过加锁来解决对共享资源的并发控制。

在 Go 语言中提供了互斥锁sync.Mutex{}和读写锁sync.RWMutex{}。他们都实现了sync.Locker接口:

// A Locker represents an object that can be locked and unlocked.
type Locker interface {
    Lock()
    Unlock()
}
GoLang 2024年12月26日 6750

Go 多模块工作区模式的最佳实践

在使用 Golang 做编程的学习和工作中,经常会将一个项目拆分成多个模块,模块之间保持着一定层级的依赖关系。往往修改完上游模块后,必须发布以后,下游模块更新后才能使用修改后的上游模块,如果在下游模块使用时发现问题需要再次修改上游模块,然后再发布,下游模块再更新,如此往复,费时费力,大大降低开发和调试效率。

工作区(workspaces) 模式是 Go1.18 中引入的新功能,让多个模块并行开发和调试。无需在 go.mod 中使用 replace 来本地使用开发上游模块。

在没有工作区之前,假设有两个模块mod1mod2mod1依赖mod2,如果mod2中做了修改,mod1要想使用mod2修改后的功能,有两种方式:

GoLang 2024年11月24日 2202

Golang 开发游戏服务端的框架推荐

游戏的种类也很多,各种3A大作、手机游戏、小游戏等。就游戏服务端而言,由于游戏本身差异,很难有一个大而全的游戏服务端框架,为满足日益变化的业务需求,很多企业都是自主开发定制自己的框架,或者从很小的一个http+rpc基础开始,不断扩展来满足的各自的业务需求。

非要说推荐几个Golang的游戏服务端框架,也不是没有,这里更加Gibhub的 star 数来推荐几个还不错的框架。

下面这些都是有一定 star 并且还在活跃的项目:

GoLang 2024年10月21日 1448

在 Go 语言中如何进行 AES-ECB-256 加解密

AES(高级加密标准),是一种对称加密算法,由美国国家标准与技术研究院(NIST)于2001年发布,用于取代早期的DES加密算法,支持128位、192位和256位密钥长度,广泛应用于数据安全领域。

相比其他的对称加密如DES,由于DES密钥长度只有56位如今的算力甚至可以在5分钟内破解,而AES最高级别达到了256位密钥长度,如果采用穷举法,目前来看AES是一种”无法“被破解的加密存在。

不过在 Go 中通常需要使用crypto/aescrypto/cipher包实现AES加密解密。

GoLang 2024年09月20日 2133

Go 语言包管理利器:go mod

包管理工具已是编程语言的必备的工具,用于解决项目中复杂的依赖关系,提供包的版本控制、安装、更新等工具。Java 中有 MavenPython 中的 pip,还有 PHPcomposer 等,那么 Go 目前已经有非常成熟的包管理工具:go mod

在一个还没有使用go mod的项目中,需要使用go mod init初始化。

go mod init example.com/group/demo
GoLang 2024年03月15日 5782

Kratos:适用于云原生时代的终极 Go 微服务框架

微服务是一种软件技术架构,是将一个大型的单个应用或服务拆分成多个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级需求。

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具,是一个 Web 应用程序框架,具有富有表现力、优雅的语法。

它致力于给开发者提供完整的微服务研发体验,通过整合,可以产出一套完整的微服务治理体系,从而让开发者更加专注于业务交付。

GoLang 2024年02月02日 3024

Go语言 build 构建时使用 ldflags 参数注入版本信息

在工作中,经常需要查看一些应用程序的版本,使用-v--vserion等参数查看一个应用的版本,比如:

# node -v
v16.13.1

# go version
go version
go version go1.12.9 linux/amd64

那通过go build构成后生成的可执行文件,如果获取它的版本呢?

GoLang 2023年02月19日 1553

Go语言中实现RSA加解密、签名验证算法

随着互联网的高速发展,人们对安全的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。

在Go语言中实现RSA加解密还是比较简单的,网上很多教程都是基于Go原生标准库写的,代码量较多。这里分享一个好用的库:https://github.com/forgoer/openssl

go get https://github.com/forgoer/openssl
GoLang 2022年12月09日 705

Go语言中实现HmacSHA256加密算法

HmacSHA256加密算法比较常用的加密算法之一,它比MD5更加安全。HmacSHA256也是微信支付推荐的加密方式。

在Go语言中实现HmacSHA256还是比较简单的,虽然没有PHPhash_hmac一个函数搞定的方式简单,但比起Java中的实现还是简单不少。

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "encoding/hex"
    "fmt"
)

// HmacSha256 计算HmacSha256
// key 是加密所使用的key
// data 是加密的内容
func HmacSha256(key string, data string) []byte {
    mac := hmac.New(sha256.New, []byte(key))
    _, _ = mac.Write([]byte(data))

    return mac.Sum(nil)
}

// HmacSha256ToHex 将加密后的二进制转16进制字符串
func HmacSha256ToHex(key string, data string) string {
    return hex.EncodeToString(HmacSha256(key, data))
}

// HmacSha256ToHex 将加密后的二进制转Base64字符串
func HmacSha256ToBase64(key string, data string) string {
    return base64.URLEncoding.EncodeToString(HmacSha256(key, data))
}

func main() {
    // secret 是加密要使用的key
    // apple 是要加密的内容
    fmt.Printf("HmacSha256转16字符串: %s\n", HmacSha256ToHex("secret", "apple"))
    fmt.Printf("HmacSha256转base字符串: %s\n", HmacSha256ToBase64("secret", "apple"))
}
GoLang 2022年10月09日 1306

Go语言切片删除指定元素

Go语言中并没有提供内置函数来删除切片,熟悉Java/PHP的都知道,在Java/PHP中都提供对list或数组的filter操作,那么在Go语言中就需要多用几行代码来实现删除切片中的指定元素了。

假设有个1~9的数组,要删除掉其中的偶数,那么这里先进行for循环,依次判断元素是否为偶数,然后将偶数的元素通过索引截取掉,下标i向左移动一位。

    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    for i := 0; i < len(numbers); i++ {
        if numbers[i]%2 == 0 { // 如果是偶数就删除
            // 通过截取删除
            numbers = append(numbers[:i], numbers[i+1:]...)
            i--
        }
    }
    fmt.Println(numbers) // [1 3 5 7 9]
GoLang 2022年09月05日 1327

Go语言中的切片

切片,是一组可变长度的、同类元素的集合

与数组相比切片的长度是不固定的。切片可以追加元素,在追加元素时可能使切片的容量增大。

切片在使用前必须初始化,未初始化的切片的值为nil

GoLang 2022年08月29日 635

排行

解决方案

网站建设

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

系统开发

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

技术支撑

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

业务中台

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

文案策划

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

新媒体运营

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

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

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