在工作中,经常需要查看一些应用程序的版本,使用-v
、--vserion
等参数查看一个应用的版本,比如:
# node -v
v16.13.1
# go version
go version
go version go1.12.9 linux/amd64
那通过go build
构成后生成的可执行文件,如果获取它的版本呢?
在工作中,经常需要查看一些应用程序的版本,使用-v
、--vserion
等参数查看一个应用的版本,比如:
# node -v
v16.13.1
# go version
go version
go version go1.12.9 linux/amd64
那通过go build
构成后生成的可执行文件,如果获取它的版本呢?
随着互联网的高速发展,人们对安全的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。
在Go语言中实现RSA
加解密还是比较简单的,网上很多教程都是基于Go原生标准库写的,代码量较多。这里分享一个好用的库:https://github.com/forgoer/openssl 。
HmacSHA256
加密算法比较常用的加密算法之一,它比MD5更加安全。HmacSHA256也是微信支付推荐的加密方式。
在Go语言中实现HmacSHA256
还是比较简单的,虽然没有PHP
的hash_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"))
}
随着Go语言的快速发展,以及其卓越的性能优势,有不少PHP项目转换为Go语言,那么php独有的serialize()
和unserialize()
数据,在Go语言怎么解析呢?
其实只要找到php中序列化的编码规则,就可以用Go去实现序列化和反序列了。
在Github
上已经有实现的库了,https://github.com/leeqvip/gophp 。
go get -u github.com/leeqvip/gophp
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]
切片,是一组可变长度的、同类元素的集合
与数组相比切片的长度是不固定的。切片可以追加元素,在追加元素时可能使切片的容量增大。
切片在使用前必须初始化,未初始化的切片的值为nil
。
var slice []int
fmt.Println(slice == nil) // nil
数组,是一组固定长度的、同类元素的集合。
固定长度,声明时指定长度,长度不可以改变。
同类元素,数组中的元素必须是同一类型的
在日常项目开发中,经常需要判断一个文件的类型,比如图片上传时,判断一个图片是否是jpg
、png
等。
如果单纯更改文件名的后缀取判断,这并不推荐,因为文件的后缀是可以随便修改的,如果是恶意程序伪装成.jpg
图片上传,那会存在很大的安全隐患。
流程控制是对程序在不同条件下的执行顺序的控制。通俗来讲,就是不同的代码在什么情况下才执行,哪些先执行,哪些后执行。
一般来说,程序代码的执行是从上往下顺序执行,但它这并不准确,如果有流程控制语句,只有当控制语句中指定条件得到满足时才执行相应的代码。
运算符是程序中用于计算的符号。
算术运算符主要用于数学计算。
+
、-
、*
、/
、%
分别表示加、减、乘、除、及取余数。
布尔类型的类型标识符是bool
,它的值只能为: true
(真)、false
(假),其默认值为false
。
// 声明isSunday为bool类型,默认值为 false
var isSunday bool
// 声明isSaturday变量,并赋值为true
var isSaturday bool = true
// 类型推导模式:
var isSaturday = true
// 可以缩写为
isSaturday := true
Go语言中的变量和常量是编码中不可缺少的一部分,它是用来存储程序执行过程中的值或结果。
变量
是用于存储程序中的可变的值或结果。变量的命名只能有字母、数字、下划线组成,且只能由字母或下划线开头。
这篇文章主要介绍Go语言中的数据类型和构成要素,包括标识符、关键字、运算符、标点符号等。
和其他语言一样,开始先来个Hello,world
程序:
// 包声明
package main
// 依赖包导入
import "fmt"
// 主函数
func main() {
// 打印 Hello World !
fmt.Println("Hello World !")
}
布尔类型,bool,其值为:true
或者false
数值类型
uint8 the set of all unsigned 8-bit integers (0 to 255)
uint16 the set of all unsigned 16-bit integers (0 to 65535)
uint32 the set of all unsigned 32-bit integers (0 to 4294967295)
uint64 the set of all unsigned 64-bit integers (0 to 18446744073709551615)
int8 the set of all signed 8-bit integers (-128 to 127)
int16 the set of all signed 16-bit integers (-32768 to 32767)
int32 the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64 the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
float32 the set of all IEEE-754 32-bit floating-point numbers
float64 the set of all IEEE-754 64-bit floating-point numbers
complex64 the set of all complex numbers with float32 real and imaginary parts
complex128 the set of all complex numbers with float64 real and imaginary parts
byte alias for uint8
rune alias for int32
字符串类型,string
数组
切片
字典(Map)
函数(Function)
接口(Interface)
结构体(Struct)
Go语言是Google推出的一个全新的编程语言,在2009年11月正式对外发布。经过快速迭代,2012年3月28日,Go发布第⼀个正式的稳定版本。
出身名门的go语言,吸收了其他语言的特点,是一种并发的、带垃圾回收的、快速编译的语言。
字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
字节序分为:大端字节序
和小端字节序
。
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们