在工作中,经常需要查看一些应用程序的版本,使用-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语言中并没有提供内置函数来删除切片,熟悉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
。
数组,是一组固定长度的、同类元素的集合。
固定长度,声明时指定长度,长度不可以改变。
同类元素,数组中的元素必须是同一类型的
在日常项目开发中,经常需要判断一个文件的类型,比如图片上传时,判断一个图片是否是jpg
、png
等。
如果单纯更改文件名的后缀取判断,这并不推荐,因为文件的后缀是可以随便修改的,如果是恶意程序伪装成.jpg
图片上传,那会存在很大的安全隐患。
判断文件的真实类型就是获取文件的MIME类型,一般获取文件内容的前几个字节就可以确定它的MIME类型了。
那么在Go语言中如何获取MIME类型呢?在Go语言的标准库net/http
包下面有一个http.DetectContentType
,借助这个方法就可以获取文件的MIME类型了。
流程控制是对程序在不同条件下的执行顺序的控制。通俗来讲,就是不同的代码在什么情况下才执行,哪些先执行,哪些后执行。
一般来说,程序代码的执行是从上往下顺序执行,但它这并不准确,如果有流程控制语句,只有当控制语句中指定条件得到满足时才执行相应的代码。
流程控制语句主要有:条件语句(if/else)、循环语句(for)、选择语句(switch/case)
运算符是程序中用于计算的符号。
算术运算符主要用于数学计算。
+
、-
、*
、/
、%
分别表示加、减、乘、除、及取余数。
var a int = 5
var b int = 3
var c int
c = a + b // c等于a+b的值,8
c = a - b // c等于a-b的值,2
c = a * b // c等于a乘b的值,15
c = a / b // c等于a除b的整数值1,整数除整数返回整数,浮点数除浮点数返回浮点数
c = a % b // c等于a除b的余数2,取余(模)运算
布尔类型的类型标识符是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 !")
}
Go语言是Google推出的一个全新的编程语言,在2009年11月正式对外发布。经过快速迭代,2012年3月28日,Go发布第⼀个正式的稳定版本。
出身名门的go语言,吸收了其他语言的特点,是一种并发的、带垃圾回收的、快速编译的语言。
defer
panic
recover
错误处理机制java
php
里的反射(Reflection)类似编程语言五花八门,在C/C++
Java
Python
PHP
JavaSrcipt
等主流语言强势领头的环境下,Go语言也有着其独特的优势,抓住开发者的痛点,以最直接、简单、高效、稳定的方式来解决问题。
字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
字节序分为:大端字节序
和小端字节序
。
小端字节序
,指一个单元在计算机中存放时按照低位在低地址,高位在高地址的模式存放;
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们