• GO语言与C#代码行数对比


    为什么要做这个对比

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

    总体Go语言代码行数多余C#

    GO:39行
    
    //登陆禅道系统
    func (p *ZenAPI) Login(userName string, password string) (bool, error) {
    	zenMsg, err := doHttp("GET", "api-getsessionid.json", "")
    	if err != nil {
    		return false, err
    	}
    
    	if zenMsg.Status == "success" {
    		data, ok := toJson(zenMsg.Data)
    		if ok {
    			sessionId, ok := data["sessionID"]
    			if ok {
    				zenMsg, err := doHttp("GET", fmt.Sprintf("user-login.json?sessionID=%s&account=%s&password=%s", sessionId, userName, password), "")
    				if err != nil {
    					return false, err
    				}
    
    				if zenMsg.Status == "success" && zenMsg.Data == "" {
    					p.userName = userName
    					return true, nil
    
    				} else {
    					if zenMsg.Reason == "" {
    						return false, errors.New("用户名或者密码错误")
    					} else {
    						return false, errors.New(zenMsg.Reason)
    					}
    				}
    
    			} else {
    				return false, errors.New("无法获取sessionId")
    			}
    
    		} else {
    			return false, errors.New("无法获取Data")
    		}
    
    	}
    
    	return false, err
    }
    

    然后看下 C#

    C# 31行
    
    public bool DoLogin(string username,string password,out string reason)
     {
                var zendData = DoRequest("api-getsessionid.json", "", HttpMethod.Get);
                reason = "";
                if (zendData.status == "success")
                {
                    var data = zendData.data;
                    var o = JObject.Parse(data);
                    var sessionName = (string)o["sessionName"];
                    var sessionId = (string)o["sessionID"];
    
                    zendData = DoRequest($"user-login.json?{sessionId}={sessionId}&account={username}&password={password}", "", HttpMethod.Get);
                    if (zendData.status == "success" && zendData.data == null)
                    {
                        this.userName = username;
                        return true;
                    }
                    else
                    {
                        if (zendData.reason == null)
                        {
                            reason = "用户名或者密码错误";
                        }
                        else
                        {
                            reason = zendData.reason;
                        }
                        return false;
                    }
                }
                return false;
            }
    
    序号 语言 行数
    1 GO 35行
    2 C# 31行

    分析差异

    • Go没有异常捕获,必须判断error,ok等返回值

      这点,明显的问题就是造成代码多了3行判断,而C#没有处理错误情况(实际执行会跑异常出去)
      但另外一方面,也存在优点:程序对于异常处理场景会更严禁

    • Go强制要求{ 写在一行,虽然多了错误判断,但也减少了代码行数
      C#有很多{的行

    只是记录,不评判忧略

    实际上目前我也没有能力判断GO和C#哪个更好
  • 相关阅读:
    线程 day40
    进程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) day38
    进程 day36
    操作系统的发展史 day36
    git项目.gitignore文件不生效解决办法
    Java8 Lambda表达式和流操作如何让你的代码变慢5倍
    @GetMapping和@PostMapping接收参数的格式
    Non-parseable POM C:Usersadmin.m2 epositoryorgspringframework问题解决方案
    hessian
    eclipse 中PlantUML的安装和使用
  • 原文地址:https://www.cnblogs.com/dcll/p/14762344.html
Copyright © 2020-2023  润新知