2021-05-12 GO 与C#代码行对比

Python011

2021-05-12 GO 与C#代码行对比,第1张

最近在做一个内网穿透工具,是用C# Dotnet Core写的。 总担心性能不行,想参考下别人写的。 结果搜到很多GO语言的例子。 看了下Go语言的介绍,觉得确实是比较简单的语言。并且在并发上比较方便。于是,就开始学习Go语言,并用Go把内网穿透工具重新写了一下。

然后,又想用Go语言重写之前的DotnetCore的WebAPI,现在还在编写中,只是对比下两个语言差异。

然后看下 C#

实际上目前我也没有能力判断GO和C#哪个更好

协议+域名+端口号都相同才是同域

在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link>等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。

如果对跨域请求不做限制,会有安全隐患

跨源资源共享 Cross-Origin Resource Sharing(CORS) 是一个新的 W3C 标准,它新增的一组HTTP首部字段,允许服务端其声明哪些源站有权限访问哪些资源。换言之,它允许浏览器向声明了 CORS 的跨域服务器,发出 XMLHttpReuest 请求,从而克服 Ajax 只能同源使用的限制。

在使用go语言写测试服务的时候遇到了前端跨域请求问题,只需在go中加入

https://www.jianshu.com/p/f880878c1398

http跨域: https://zhangbinalan.gitbooks.io/protocol/content/httpkua_yu_qing_qiu.html

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

现在有个结构体如下定义:

我们需要初始化结构体,如果是其他语言,函数支持默认参数

但是,go语言函数不支持默认参数,同时即使go语言支持默认参数,但是如果配置项过多,那么每一个配置项都得写一个默认参数,也不现实。

那么,在go语言中,我们怎么优雅的给其初始化呢,这时,就需要利用选项模式了(option)。

首先,我们定义一个option函数类型:

它接收一个参数: *Server 。

然后定义一个 NewServer 函数,它接收一个 Option类型的不定参数:

最后,再直接定义一系列返回 Option的函数

使用时,直接: