Tag: Go

您了解Swift中的延期吗?

几周前,我开始研究Golang,因为在Axiom Zen中我们已经使用了很多,而且我意识到它还使用了与Swift中基本相同的defer语句。 有趣的是,当我学习堆叠延迟时,我不得不停下来问自己。 Swift中的输出是什么? func some() { for i in 0..<10 { defer { print(i) } } } 由于Golang的延迟使用了堆栈,因此Go中的输出为9,8,7 9, 8, 7, …, 0 。 斯威夫特呢? 好吧,斯威夫特打印0, 1, 2, …, 9 。 因此,Swift使用队列,对吗? 错误! Swift中的defer也使用堆栈,但是defer语句的工作方式是指当前作用域 ,即,它仅在示例中的for范围内进行延迟。 每次通过for循环时,都会弹出defer堆栈 ,这就是为什么它以升序打印数字的原因。 如果是: func someOther() { defer { print(“a”) } defer { print(“b”) } } 正如我所期望b, a那样b, a这将堆叠延迟并仅打印b, a […]

anagram-go-java:Go和Java并排使用-​​旧的编码器回头看Java

昨天,我摸索了一个简单的面试问题。 这是我第一次使用coderpad.io(聪明的主意),也许是我第一次有人在编码时看着我的肩膀,而没有允许一两个StackOverflow。 面试官真的希望我用Java做到这一点,这让我感到不安,我已经使用Go编码了一段时间,并尝试使用Go进行编码。 我用注释将其伪编码出来,然后迅速间隔一下如何在Go中从字符串中获取该死的字符。 叹。 所以,我决定写这篇文章作为减轻自己对自己的失望的pen悔。 我现在正在为多种项目使用3种不同的语言:Go,Python和Swift(很好,Swift 3)。 老实说,我只是不保持这三个语法的全部一致性,我在编码时会进行很多模式匹配/复制/粘贴,并且很少再逐个关键字地将其键入。 我想,我上一次这样做是在1988-1992年的时间范围内使用Objective-C。 现在,当我使用这些微模式时,我的编码要好得多,并且在整个代码库中一切看起来都一样。 面试结束不到5分钟,我就可以使用Go版本了。 然后,今天早上,我以为,经过了这么多年,我又回过头去做同样的事情,被翻译成Java。 我猜想花了太长时间,但这让我想起了过去十年来我忘记了Java的东西,而我却忽略了它。 它也显示了一个有趣的案例,其中可以比较Go和Java,而Go表现得很好(IMHO)。 以及“ map:hashtable”一词; 它是“ Go:Java”,因此Go中的地图几乎是Java中的Hashtable。 恩比恩? 杰,好的。 测试数据: anagram(aab,aba)= true anagram(aab,cab)=否 anagram(aab,abdcefghijklmnopqrstuvwxyz)=否 //而且我知道,我知道(您是行家)符文**, //但他说,不,只是一个简单的字符串。 首先,我决定将字谜决定放到一个函子中。 // 走 func anagram(x,y string)bool { // Java public boolean anagram(String x,String y){ //’x’是第一个字符串 //’y’是第二个字符串 //如果它们是彼此的字母,则返回true //否则返回false。 我在两个特殊情况下进行了几次快速检查,以使例程短路:1)如果X等于Y(因此字符串相同),则返回true。 (在字谜的某些定义中,这可能并非严格正确 )。 2)如果两个字符串的长度不同,那么它们不是字谜,则返回false。 现在,在Go世界中,有两种方法可以声明map:hashtable ,其中键是字符串,值是整数。 但是基本思想是键/值存储库之一,将其作为键的值,然后当您通过键要求时将其取回。 (我记得Dictionary是Java的东西,不是吗?还是它一直是抽象类型?但是现在我知道Dictionary已过时了,请改用Map接口。) // […]