golang零散知识点 agile Posted on Aug 14 2019 golang ###ConstantTimeCompare - `subtle.ConstantTimeCompare([]byte(a), []byte(b))`在[`crypto/subtle`](https://www.php.cn/manual/view/35163.html)库中,该方法仅当两个切片x和y具有相等的内容时,ConstantTimeCompare 返回1。所花费的时间是切片长度的函数,并且与内容无关。 - 如果你的byte slice中包含需要验证用户数据的隐私信息(比如,加密哈希、tokens等),不要使用 reflect.DeepEqual()、 bytes.Equal(),或者 bytes.Compare(),因为这些函数将会让你的应用易于被定时攻击。为了避免泄露时间信息,使用 'crypto/subtle'包中的函数 --- ###net.JoinHostPort - `func JoinHostPort(host, port string) string`:[JoinHostPort](https://www.php.cn/manual/view/35250.html)将主机和端口组合成“host:port”形式的网络地址。如果主机包含冒号(如文字IPv6地址中所示),则JoinHostPort返回“host:port” ```golang func JoinHostPort(host, port string) string { // We assume that host is a literal IPv6 address if host has // colons. if bytealg.IndexByteString(host, ':') >= 0 { return "[" + host + "]:" + port } return host + ":" + port } func IndexByteString(s string, c byte) int { for i := 0; i < len(s); i++ { if s[i] == c { return i } } return -1 } ``` --- Pretty Printing代码解析 golang 格式化时间总结