技术圈开发者交流群:

Go 语言包管理利器:go mod

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

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

GoLang 2024年03月15日 5628

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

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

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

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

微服务,通过可独立演进的微服务快速交付生产级功能。

GoLang 2024年02月02日 2720

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

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

# node -v
v16.13.1

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

那通过go build构成后生成的可执行文件,如果获取它的版本呢? 你是否会想到,直接在代码中写死版本?当然可以,但是太麻烦了,发布版本前需要在代码中修改版本。

一般在发布应用程序时,都需要先go build,那么可以通过-ldflags参数来注入版本到应用程序中。

GoLang 2023年02月19日 907

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

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

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

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

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

Go语言中实现PHP中的serialize序列化和unserialize反序列

随着Go语言的快速发展,以及其卓越的性能优势,有不少PHP项目转换为Go语言,那么php独有的serialize()unserialize()数据,在Go语言怎么解析呢?

其实只要找到php中序列化的编码规则,就可以用Go去实现序列化和反序列了。

GoLang 2022年09月20日 1041

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]

同样是1~9的数组,通过遍历,将不需要删除的元素依次在原来的数组上覆盖原有元素。最后只截取前面j个有效元素即可。

GoLang 2022年09月05日 1195

Go语言中的切片

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

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

GoLang 2022年08月29日 505

Go语言中的数组

数组,是一组固定长度的、同类元素的集合。

固定长度,声明时指定长度,长度不可以改变。

同类元素,数组中的元素必须是同一类型的

数组的声明,比如:声明一个长度为3的、元素类型为string的数组:

GoLang 2022年08月15日 747

在Go语言中获取一个文件的MIME类型

在日常项目开发中,经常需要判断一个文件的类型,比如图片上传时,判断一个图片是否是jpgpng等。

如果单纯更改文件名的后缀取判断,这并不推荐,因为文件的后缀是可以随便修改的,如果是恶意程序伪装成.jpg图片上传,那会存在很大的安全隐患。

判断文件的真实类型就是获取文件的MIME类型,一般获取文件内容的前几个字节就可以确定它的MIME类型了。

那么在Go语言中如何获取MIME类型呢?在Go语言的标准库net/http包下面有一个http.DetectContentType,借助这个方法就可以获取文件的MIME类型了。

GoLang 2022年07月14日 2790

Go语言中的流程控制语句

流程控制是对程序在不同条件下的执行顺序的控制。通俗来讲,就是不同的代码在什么情况下才执行,哪些先执行,哪些后执行。

一般来说,程序代码的执行是从上往下顺序执行,但它这并不准确,如果有流程控制语句,只有当控制语句中指定条件得到满足时才执行相应的代码。

流程控制语句主要有:条件语句(if/else)、循环语句(for)、选择语句(switch/case)

GoLang 2022年05月23日 1056

Go语言中的运算符

运算符是程序中用于计算的符号。

算术运算符主要用于数学计算。

+-*/%分别表示加、减、乘、除、及取余数。

GoLang 2022年03月15日 1259

Go语言中的基本数据类型及类型转换

布尔类型的类型标识符是bool,它的值只能为: true(真)、false(假),其默认值为false

// 声明isSunday为bool类型,默认值为 false
var isSunday bool
// 声明isSaturday变量,并赋值为true
var isSaturday bool = true
// 类型推导模式:
var isSaturday = true
// 可以缩写为
isSaturday := true

数值类型就是用来表示数字的,例如整数、小数等。

GoLang 2022年03月06日 1389

Go语言中的变量和常量

Go语言中的变量和常量是编码中不可缺少的一部分,它是用来存储程序执行过程中的值或结果。

变量是用于存储程序中的可变的值或结果。变量的命名只能有字母、数字、下划线组成,且只能由字母或下划线开头。

变量必须先声明、后使用,且声明后必须使用。

GoLang 2022年03月06日 1441

Go语言的数据类型和构成要素

这篇文章主要介绍Go语言中的数据类型和构成要素,包括标识符、关键字、运算符、标点符号等。

和其他语言一样,开始先来个Hello,world 程序:

GoLang 2022年02月13日 1185
鄂ICP备19028750号-1 @copyright 2024 tech1024.com