Gin 框架学习:HTTP2 server 推送

http.Pusher 仅支持 go1.8+。

http2.go:

func main() {
	r := gin.Default()
	r.Static("/assets", "./assets") //静态资源目录绑定

	r.GET("/", func(c *gin.Context) {
		if pusher := c.Writer.Pusher(); pusher != nil {
			// 使用 pusher.Push() 做服务器推送
			if err := pusher.Push("/assets/app.js", nil); err != nil {
				log.Printf("Failed to push: %v", err)
			}
		}
		c.HTML(200, "https", gin.H{
			"status": "success",
		})
	})

	// 监听并在 https://127.0.0.1:8080 上启动服务
	r.RunTLS(":8080", "./testdata/cert.pem", "./testdata/key.pem")
}

assets/app.js:

console.log("hello app.js");

证书文件 cert.pem、key.pem 可以去 Gin 框架目录下的 testdata/certificate 复制过来用。

运行后,要使用 https 访问链接 https://127.0.0.1:8080/

Chrome 浏览器提示证书无效,我们选择继续访问。

按 F12 打开开发者工具,刷新页面,可以看到 app.js 是通过 Push 方式推送到浏览器的。

 

分类至 GO
0条评论

Gin 框架学习:AsciiJSON

使用 AsciiJSON 生成具有转义的非 ASCII 字符的 ASCII-only JSON。 

asciijson.go 代码:

package main

import "net/http"
import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()

	r.GET("/someJSON", func(c *gin.Context) {
		data := map[string]interface{}{
			"lang": "GO语言",
			"tag":  "<br>",
		}
		c.AsciiJSON(http.StatusOK, data)
	})

	r.Run(":8080")
}

执行 go run asciijson.go 后访问 http://127.0.0.1:8080/someJSON,输出:

{"lang":"GO\u8bed\u8a00","tag":"\u003cbr\u003e"}

 

分类至 GO
0条评论

go get 指令报错:exit status 128

使用 go get 下载包时,可以加 -v 参数查看下载进度。

有时候即便设置了 GORPOXY 环境变量,有些包仍会下载失败,报 package xxx: exit status 128 的错误。比如我在下载 Gin 框架时,报错...

分类至 GO
0条评论

linux 生成随机字符串的方法

随机字符串常用于创建随机账号或密码,Linux 可用以下方法生成随机字符串。

1.生成由大写字母组成的随机字符串:

[root@VM_0_13_centos ~]# head /dev/urandom | tr -dc A-Z | head -c 20
NRXFYZRTUEDXTVPJAYJW

2.生成由小写字母组成的随机字符串:

[root@VM_0_13_centos ~]# head /dev/urandom | tr -dc a-z | head -c 20
rizsfwebsmfowsogsqfi

3.生成由纯数字组成的随机字符串:

[root@VM_0_13_centos ~]# head /dev/urandom | tr -dc 0-9 | head -c 20
06983118429648544871

4.生成由大写字母、小写字母、数字组成的随机字符串:

[root@VM_0_13_centos ~]# head /dev/urandom | tr -dc A-Za-z0-9 | head -c 30
kFac0BEcbWS9eTZWZwn52ps53kGp6q

5.写成 Shell 脚本:

#!/bin/bash

pass=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 30)
echo $pass

 

分类至 Linux
0条评论

Go 中 json 的转换与解析

在 Go 语言中,操作 json 的标准库是 encoding/json,使用 json.Marshal() 方法可以将结构体转换为 json 数据,使用 json.Unmarshal() 方法可以将 json 数据转换为 Go 语言的结构体。

示例代码如下…

分类至 GO
0条评论

Go modules 设置代理

由于某种原因,在国内无法安装 Go 模块,因为模块默认下载地址是 golang.org/x/...。并且从 GitHub 获取模块的速度也有点慢。

在这里,推荐一个速度不错的 Go 模块代理地址:https://goproxy.cn

分类至 GO
0条评论

Go 接收任意数量参数的函数

Go 接收任意数量参数的函数,使用了 ...type 语法糖:

package main

import "fmt"

func MyPrintf(args ...interface{}) {
	for _, arg := range args {
		switch arg.(type) {
		case int:
			fmt.Println(arg, "is an int value.")
		case string:
			fmt.Println(arg, "is an string value.")
		case int64:
			fmt.Println(arg, "is an int64 value.")
		default:
			fmt.Println(arg, "is an unknow type.")
		}
	}
}

func main() {
	var v1 int = 1
	var v2 int64 = 234
	var v3 string = "hello"
	var v4 float32 = 1.234
	MyPrintf(v1, v2, v3, v4)
}

 

分类至 GO
0条评论