-
## 语言变化
### slice转数组
Go1.17在语言层面开始支持将slice转为指向数组的指针。
示例如下:
```go
s := make([]byte, 2, 4)
// 将s这个slice转为指向byte数组的指针s0
// 其中[0]byte里的0表示数组的长度,虽然长度为0,但值不等于nil
s0 := (*[0]byte)(s) // s0 != nil
fmt.Printf("%T")
// 将s[1:]这个slice转为指向byte数组的指针s1
// s1指向的数组的长度为1
s1 := (*[1]byte)(s[1:]) // &s1[0] == &s[1]
// 将s这个slice转为指向byte数组的指针s2
...
发布日期:
2023-03-04
分类:
Go
浏览量:
375
0条评论
-
基于ZooKeeper和etcd实现服务的注册和发现功能的原理。
## ZooKeeper
### 服务注册
利用临时节点的特性,创建一个服务的临时节点,写入服务信息数据,不断监视节点续期,当服务不可用时会话超时,临时节点会被删除。
### 服务发现
服务发现是利用`watch`的特性,首先获取一遍需要的服务信息,保存在本地,然后给这个服务节点添加`watch`,监视变化和更新。
## etcd
### 服务注册
服务注册是利用了etcd租约的特性。
首先创建一个定时的租约,比如10秒,20秒等。
然后带租约存储服务信息,不断的续期租约,当服务不可用时,租约过期,服务数据就会被删除,就相当于心跳保活了。
### 服务发现
...
发布日期:
2023-01-17
分类:
Go
浏览量:
389
0条评论
-
go的AES加密主要用`crypto/aes`和`crypto/cipher`两个库来实现。
AES加密模式又好多种,这里研究了6种模式:CBC、CFB、OFB、ECB、CTR、GCM模式。
一看到这么多模式,如果那里需要用到一下都不知道哪种好,这里大概总结一下。
如果数据通过非对称签名进行身份验证,则使用CBC,否则使用GCM。
最好的模式是GCM模式,GCM可以保证数据的保密性和完整性,其他模式只能保证保密性,不能保证完整性,具体可以去了解下AEAD。
GCM模式属于AEAD加密。
所以除了GCM模式之外其他模式最好是增加hmac哈希,用来验证数据完整性。
ECB模式不建议使用,因为这种模式不安全,go的内置库也没有去实现这种模式。
g...
发布日期:
2022-11-11
分类:
Go
浏览量:
783
0条评论
-
Gin模型数据绑定验证器用的是go-playground/validator/v10。默认提示是英文内容,我们需要翻译成中文内容。
创建一个文件`validator.go`:
```go
package utils
import (
"github.com/gin-gonic/gin/binding"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zhtranslat...
发布日期:
2021-12-08
分类:
Go
浏览量:
1516
0条评论
-
go从1.11版本开始,实验性的加入了`WebAssembly`的支持。
## `hellow world`程序
```go
package main
import "fmt"
func main() {
fmt.Println("Hello, WebAssembly!")
}
```
设置go编译`WebAssembly`环境变量值,`GOOS=js`和`GOARCH=wasm`。
设置方法有两种:
- 修改默认变量值,执行命令:`go env -w GOOS=js GOARCH=wasm`
- 编译的时候指定值:`cd`到项目根目录,执行命令:`GOOS=js GOARCH=wasm go build -o main.wasm`
...
发布日期:
2020-01-09
分类:
Go
浏览量:
3502
0条评论
-
文章是翻译自Go官方博客的文章:http://blog.golang.org/errors-are-values随便翻译的一下,给自己参考,有需要的同学也可以参考参考,翻译的不好的地方或者难以理解的地方请参考原文。本人英语本身也不怎么样!所有有可能会有理解错误,用词不当,语言组织不当的地方,请见谅!该怎么样去处理错误(errors),是go程序员特别是刚学go的人之间的一个共同讨论点。讨论经常会随着下面这段程序出现的次数越来越多而变成抱怨。if err != nil {
return err
}我们最近扫描了所有我们能够找到的开源项目,发现重复出现这段代码的次数是每页或者每两页只出现了一次,是不是比你想象中的要少很多。然而,如果你还是感觉必须到处写if err != nil,那一定是...
发布日期:
2015-05-24
分类:
Go
浏览量:
3757
0条评论