Java转Go语言 -4
The way go to go的六章总结
函数(function)
介绍
Go语言是编译型语言,编译成机器语言,优点是执行速度快。(C语言)
Java是解释性语言,先编译成class文件,然后根据不同的操作系统再进行解释。
函数参数,返回值以及返回值的类型被称为函数签名;
Go中不允许函数重载;(重载需要类型匹配影响性能;这样的话,只需要函数调度)
函数可以相互比较(前提是引用的是相同函数或者nil);但是不能嵌套(解决方案是会用匿名函数)
Go没有泛式,最好是为每一个类型单独创建一个函数,这样代码可读性更强。(也是处于性能的考虑)
函数参数与返回值
- 引用传递和值传递跟Java一样
- return 或者return var都是可以的,前者就体现了Go语言的高效(毕竟已经指明了返回值,就不用在这里再写一次了)
- 尽量使用命名返回值(这种机制才做出来很让人烦恼,毕竟不推荐但是有,总会有人图省事的)
传递变长参数
三种形式处理:
- …type
- 使用结构
- 使用空接口
(这种变长参数大概是因为没有重载这种机制,为了弥补而出现的)
defer和追踪
- defer允许我们推迟到函数返回之前来执行某个操作(类似于java的finally 用于释放某些资源)多个defer会逆序执行
- 第二个功能是追踪
我觉得第一个功能只能说是方便了编程人员的工作,第二个追踪在我看来更加实用。
内置函数
递归函数
- 问题一是栈空间溢出,可以用懒惰求值解决 在Go语言中使用管道和goroutine
- 注意 多个函数之间互相调用,形成的闭环问题
将函数作为参数
闭包
- 匿名函数,不能独立存在 要么 赋值于某个变量,要么直接调用
- 匿名函数也叫做闭包,闭包可以使得某个函数捕捉到一些外部状态
应用闭包:将函数作为返回值
- 刚好昨天看了JS的闭包,都是一样的东西,设置一个私有区域的值。
闭包函数保存并积累其中的变量的值,不管外部函数退出与否,都能继续操作外部函数中的局部变量。 - 高阶函数,有点高数的意思,我们把函数看成一个值,值嵌套一个值那样的话不就是高阶的意思吗,就叫做高阶函数。
使用闭包调试
这个很有用,就是很多包内的函数在执行,你想知道那个函数执行了或者执行的顺序等,可以用闭包来统计数值(调用的顺序),通过runtime或log包中的特殊函数来实现这样的功能。
计算函数执行的时间
利用time包中的Now()和Sub()函数
这节好无聊啊
通过内存缓存来提升性能
这个就是通过存储出现过得值来提升运算效率啊。算法中的东西。
适合那些大量计算,其中包含很多重复结果的例子。
Java转Go语言 -4相关推荐
- java 全局变量_Java语言与C语言、C++语言有何差异以及优劣势
差异 熟悉C语言和C++语言的读者一定想搞清楚这个问题,实际上,Java确实是从C语言和C++语言继承了许多成分,甚至可以将Java看成是类C语言发展和衍生的产物.比如Java语言的变量声明.操作符的 ...
- arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境
Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境 更多相关问题 听力原文:W: Hi, Steve, good to see you are up and around a ...
- JAVA调用R语言之Rserve(二)
之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...
- 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...
- 人工智能用python还是java_学会java和python语言,可以开始搞人工智能吗?
作为一名软件开发工程师,个人认为,当你学会Java和Phthon语言使用后,不建议你直接上手人工智能.下面我来说一下个人看法: 人工智能领域门槛较高 人工智能对于一般同学而言,其入门门槛相对较高,你虽 ...
- 学完java学swift_前言最近学完Swift之后一直没有机会实战,发现由于Swift发展历史原因,目前网上大部分的算法都是使用C、Java或其他语言实现的,几乎没有使用Swift实...
前言 最近学完Swift之后一直没有机会实战,发现由于Swift发展历史原因,目前网上大部分的算法都是使用C.Java或其他语言实现的,几乎没有使用Swift实现的,所以自己打算使用Swift去实现一 ...
- java接收c语言的结构体
java接收c语言的结构体 DataInputStream inputStream = new DataInputStream(s.getInputStream()); int read = 0; i ...
- mysql解释器_atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- 好程序员Java分享SQL语言之索引
好程序员Java分享SQL语言之索引,前言:本章我们将学习MySQL中的索引,本文将从索引的作用.索引的分类.创建索引的语法.索引的使用策略以及索引的实现原理等方面带大家了解索引. 索引的作用 索引的 ...
最新文章
- 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
- CowNew开源团队新书《自己动手写开发工具》隆重上市
- access订单明细表怎么做_成本明细表
- feachall php_timthumb.php详解
- 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
- php程序yii是什么意思,Yii框架啥意思
- 唐骏《我的成功也可以复制》1,盖婚房
- 玩转git-flow工作流-分支解析
- VS2015 IIS Express 无法启动 解决办法(转)
- magent + memcached部署过程
- 【Python】hashlib模块实现MD5加密
- mysql数据库作业_mysql数据库操作练习
- 如何恢复丢失的分区及文件
- antd 实现pdf 预览_react 的pdf预览插件应用
- QT调用巴斯勒相机的使用
- 科技论文计算机排版格式,科技论文排版参考格式
- 解密Excel文件打开密码
- Android串口开发
- android系统开机logo定制
- 第十七届全国大学智能车竞赛赛场合影集锦