我有一个使用本地可信证书的 Go 服务器和客户端,它们相互通信完美无缺。现在我希望 Go 服务器也与 web-grpc 实例进行通信。Insecure 不起作用,因为浏览器强制 HTTP2 通过 TLS 或完全拒绝它。毕竟;无论如何,它也应该适用于生产中的 TLS。另一个问题也是 CORS,我无法弄清楚要给https://github.com/improbable-eng/grpc-web的服务器实现版本添加原始标头。但首先。
我提供了一个简单的 HTML 和 Webpack 构建 JS,我通过 TLS 为它提供了一个简单的 Golang FileServer。
我首先生成了一个新的 TLS 证书/密钥(已成功使用的 Go Server/Client 对):
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=www.wp-ts.loc" -keyout ./www.wp-ts.loc.key -out ./www.wp-ts.loc
Run Code Online (Sandbox Code Playgroud)
然后我将它添加到 macOS 钥匙串中以供信任:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain www.wp-ts.loc
Run Code Online (Sandbox Code Playgroud)
这是我使用的 Protobuf 文件:
syntax = "proto3";
package pb;
service GCDService {
rpc Compute (GCDRequest) returns (GCDResponse) {}
}
message GCDRequest { …Run Code Online (Sandbox Code Playgroud) 与像C++这样可以显式声明的语言不同inline,在Go中,编译器会动态检测内联的候选函数(C++也可以这样做,但Go不能同时执行这两种操作).还有一个调试选项可以看到可能的内联发生,但是很少有人在线记录go编译器执行此操作的确切逻辑.
假设我需要在每个n周期重新运行一组数据的大循环;
func Encrypt(password []byte) ([]byte, error) {
return bcrypt.GenerateFromPassword(password, 13)
}
for id, data := range someDataSet {
newPassword, _ := Encrypt([]byte("generatedSomething"))
data["password"] = newPassword
someSaveCall(id, data)
}
Run Code Online (Sandbox Code Playgroud)
目的是为了Encrypt正确地内联编译器需要考虑哪些逻辑?
我从C++中知道,通过引用传递将增加自动内联的可能性,而不使用显式inline关键字,但是要理解编译器确切地确定选择内联与否的决策是什么并不容易.像PHP这样的脚本语言会受到极大的影响,如果你做一个常量循环,addSomething($a, $b)其中基准测试如此十亿次循环它的成本与$a + $b(内联)几乎是荒谬的.
是https://golang.org/pkg/regexp/#Regexp.MatchString线程安全的,如果我运行regexp.MustCompile("")在HTTP请求goutines就可以了?在第一次编译后,我没有修改实例上的编译。
我只是想知道它是否在读取时也兼容,或者我是否应该应用某种形式的互斥锁。