11篇 golang related articles

golang random with range

package main

import (
    "fmt"
    "math/rand"
    "time"
)
        
func main() {
    rand.Seed(time.Now().UnixNano())
    min := 10
    max := 30
    fmt.Println(rand.Intn(max - min + 1) + min)
}

More ~

go test 覆盖率报告

go test -coverprofile=coverage.out
go tool cover -html=coverage.out

对指定目录

go test ./... -coverprofile=coverage.out
go tool cover -html=coverage.out
More ~

Go语言fmt包Printf方法详解

Go语言的标准输出流在打印到屏幕时有些参数跟别的语言(比如C#和Java)不同,下面是我整理的一些常用的格式化输入操作。

General

  • %v 以默认的方式打印变量的值
  • %T 打印变量的类型

Integer

  • %+d 带符号的整型,fmt.Printf("%+d", 255)输出+255
  • %q 打印单引号
  • %o 不带零的八进制
  • %#o 带零的八进制
  • %x 小写的十六进制
  • %X 大写的十六进制
  • %#x 带0x的十六进制
  • %U 打印Unicode字符
  • %#U 打印带字符的Unicode
  • %b 打印整型的二进制
More ~

为localhost一步生成自签名证书

为localhost一步生成自签名证书

openssl req -x509 -days 365 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
More ~

go可变参数传数组值

在https://github.com/qiniu/qmgo 中 有个方法是传排序参数,通常是一个或多个。

func (q *Query) Sort(fields ...string) QueryI {
	if len(fields) == 0 {
		// A nil bson.D will not correctly serialize, but this case is no-op
		// so an early return will do.
		return q
	}

	var sorts bson.D
	for _, field := range fields {
		key, n := SplitSortField(field)
		if key == "" {
			panic("Sort: empty field name")
		}
		sorts = append(sorts, bson.E{Key: key, Value: n})
	}
	newQ := q
	newQ.sort = sorts
	return newQ
}

若需传递多个fields, fields是个可变参数, 传值是你可能想支持多个,但对于参数个数也清楚, 那要先定义个字符串数组。

More ~

golang proxy

export GOPROXY=https://mirrors.aliyun.com/goproxy/
// or 
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy
export GOPROXY=https://goproxy.io,direct

有时goproxy.io不好用时可以用阿里的。

More ~

go语言格式化打印fmt的参数

go 软件包fmt使用与C的printf和scanf类似的功能实现格式化的I / O。

概要:

%v	默认格式的值,打印结构时,加号(%+ v)添加字段名称
%#v	该值的Go语法表示形式
%T	值类型的Go语法表示形式
%%	文字百分号;没有任何价值

Boolean:

%t	单词true或false

Integer:

%b	2进制
%c	相应的Unicode代码点表示的字符
%d	10进制
%o	8进制
%O	以0o为前缀8进制
%q	使用Go语法安全地转义的单引号字符文字。
%x	16进制的a-f小写字母
%X	16进制的A-F大写字母
%U	Unicode格式:U + 1234;与“ U +%04X”相同
More ~