这是我参与[第五届青训营]的第5天
C++简要定义
C++ 是一种静态类型的编程语言,允许工程师使用面向对象、函数式或通用编程方法。C++ 的主要优点是灵活性,因为它使开发人员能够为许多平台设计程序。
由于 C++ 的多功能性和自下而上的程序创建方法,工程师可以完全控制每段代码并将它们整合到复杂的系统中。C++ 为开发人员提供高级和中级功能,以利用创造力并为任何平台构建任何程序。
Go的简单定义
Go 或 Golang 是一种静态类型的通用编程语言,以支持并发计算而闻名。Go 允许开发人员高效地使用多核 CPU 并提高程序性能。
Go 于 2012 年由 Google 发布,用于在公司内部替代 C++。
C++ 和 Go 非常适合创建复杂的系统和方便的工具。C++ 为编写程序提供了更大的灵活性,但也要求承担更大的责任。Go 对程序员更友好,但包含某些限制。
-
如果我们希望深入研究代码并更好地控制您的程序,那么 C++ 是一个最佳的选择。
-
Go 适合那些想快速提升职业生涯的人,因为它是一种现代的、可扩展的开源语言。
// URLTest get the delay for the specified URL
// implements C.Proxy
func (p *Proxy) URLTest(ctx context.Context, url string) (t uint16, err error) {
defer func() {
p.alive.Store(err == nil)
record := C.DelayHistory{Time: time.Now()}
if err == nil {
record.Delay = t
}
p.history.Put(record)
if p.history.Len() > 10 {
p.history.Pop()
}
}()
addr, err := urlToMetadata(url)
if err != nil {
return
}
start := time.Now()
instance, err := p.DialContext(ctx, &addr)
if err != nil {
return
}
defer instance.Close()
req, err := http.NewRequest(http.MethodHead, url, nil)
if err != nil {
return
}
req = req.WithContext(ctx)
transport := &http.Transport{
Dial: func(string, string) (net.Conn, error) {
return instance, nil
},
// from http.DefaultTransport
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
client := http.Client{
Transport: transport,
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
return
}
resp.Body.Close()
t = uint16(time.Since(start) / time.Millisecond)
return
}
过程是一个UDP的测试程序,将url请求转化为元数据进行计算误差。