• ## 语言变化 ### 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    浏览量: 560   0条评论
  • 基于ZooKeeper和etcd实现服务的注册和发现功能的原理。 ## ZooKeeper ### 服务注册 利用临时节点的特性,创建一个服务的临时节点,写入服务信息数据,不断监视节点续期,当服务不可用时会话超时,临时节点会被删除。 ### 服务发现 服务发现是利用`watch`的特性,首先获取一遍需要的服务信息,保存在本地,然后给这个服务节点添加`watch`,监视变化和更新。 ## etcd ### 服务注册 服务注册是利用了etcd租约的特性。 首先创建一个定时的租约,比如10秒,20秒等。 然后带租约存储服务信息,不断的续期租约,当服务不可用时,租约过期,服务数据就会被删除,就相当于心跳保活了。 ### 服务发现 ...
     发布日期: 2023-01-17    分类: Go    浏览量: 497   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    浏览量: 932   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    浏览量: 1635   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    浏览量: 3616   0条评论
  • 文章是翻译自Go官方博客的文章:http://blog.golang.org/errors-are-values随便翻译的一下,给自己参考,有需要的同学也可以参考参考,翻译的不好的地方或者难以理解的地方请参考原文。本人英语本身也不怎么样!所有有可能会有理解错误,用词不当,语言组织不当的地方,请见谅!该怎么样去处理错误(errors),是go程序员特别是刚学go的人之间的一个共同讨论点。讨论经常会随着下面这段程序出现的次数越来越多而变成抱怨。if err != nil {     return err }我们最近扫描了所有我们能够找到的开源项目,发现重复出现这段代码的次数是每页或者每两页只出现了一次,是不是比你想象中的要少很多。然而,如果你还是感觉必须到处写if err != nil,那一定是...
     发布日期: 2015-05-24    分类: Go    浏览量: 3865   0条评论