• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > 我为什么喜欢Go语言(简洁的Go语言)

我为什么喜欢Go语言(简洁的Go语言)

作者:mdxy-dxy 字体:[增加 减小] 来源:互联网

mdxy-dxy 通过本文主要向大家介绍了go语言菜鸟教程,go语言下载,go语言,go语言环境搭建,go语言程序设计等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

从2000年至今,也写了11年代码了,期间用过VB、Delphi、C#、C++、Ruby、Python,一直在寻找一门符合自己心意和理念的语言。我很在意写代码时的手感和执行的效率,所以在Go出现之前一直没有找到。在熟悉Go之后,我虽没有停下脚步,也去体验了D语言,但几乎立即就放弃了,它的设计还是太复杂。

就说说Go吧。它的好其实也就两个字——简洁!

看很多朋友的留言都觉得这些"少个括号、少个分号"之类的东西没什么意义,真的吗?问题是,既然可以没有,为什么非得有?既然能够少打一个字符,为什么多打了还挺开心?还觉得天经地义?这里简单一点,那里简单一点,总的来说是不是就简单了很多?这里的设计简洁一点,那里简洁一点,是否整体就是紧凑高效?

很多东西,要整体去体会,才能感觉到真正的强大。没有前面这些语法上的各种"看起来没什么用"的支持,怎么能做到后面提到的那些设计上的简洁?

我坚信,少就是多,简单就是强大,不能减一分的设计才是真正的好设计!

简洁的变量声明和赋值

拿最简单的声明变量和赋值来看,下面这一句完成了声明类型到赋值,最后还有那个常见的分号作为语句的结束。

var i int = 10;

这个一点都不简洁对吧?为什么非要有"var"?为什么不能自己推导变量类型?为什么结尾非要加上分号?这三个问题,我相信Go语言的设计者也问过,并且都针对性的给了改进。重新来过。

i := 10

怎么样?":="是声明并推导类型的语法糖,结尾的分号也省了,因为这里我换行了,编译器明白的。

还可以一次性声明并赋值多个变量。

i, j, k := 1, 2, 3

不同的类型也可以。

i, j, k := 1, 1.0, "hello"

如果要声明一堆变量,但暂时不赋值呢?可以这样。

var (

    i, j int    s string
    u, v, s = 2.0, 3.0, "bar")

Go的设计者甚至觉得多打几个"var"都不应该!

简洁的if

有点意思了对吧?我学习一门新语言的时候,第一眼看变量类型和声明,第二眼就会去看逻辑控制的语法。现在来看看都有些什么?

if i > 10 {
    println("Greater then 10")
}
</div>

稀松平常啊,难道一个简单的if还能更简单?恩,的确是的。首先if后面的条件判断没有人逼你再加上括号了,仅仅是少了两次按键嘛,还有呢?还有!下面这个应该是很常见的if使用场景。

result := SomeMethod()
if result > 0 {
}
</div>

很多时候result这个变量其实仅仅用于条件判断,完全可以在if之后就扔掉,所以Go有了这么个写法。

if result := SomeMethod(); result > 0 {

}

这个表达式太常用了,真是谁写谁知道,每次我写着一行都会心里一爽。来看看纠结一点的if段。

if a {
} else if b {
} else if c {
} else {
}
</div>

这种写法是可以的,但不是Go推荐的,理由是可以更简洁。比如强悍的switch。

 

强悍的switch

这是很大家熟知的switch用法,注意,没有break哦!Go里面case之间不会"下穿"。

switch tag {
    default:         s3()
    case 0, 1, 2, 3:        s1()
    case 4, 5, 6, 7:         s2()
}
</div>

神奇一点的switch,嘿嘿,与if异曲同工之妙。

switch x := f(); {  // missing switch expression means "true"
    case x < 0: return -x
    default: return x
}
</div>

还有这个,有了这个更加明确的写法,你真的还会if…else if…else if…else…吗?

switch {
    case x < y: f1()
    case x < z: f2()
    case x == 4: f3()
}
</div>

条件判断舒服了,循环呢?

 

孤单的for

其实我一直不太明白,为什么一门语言里面要提供多个循环语法呢?for、while、do…while…都是不可替代的?用哪一个呢?似乎都是看个人爱好吧?可能大家随便就可以举个例子出来证明这三个东西存在的必要和细微的差别,但对于我来说,做同一件事情如果有多种方法其实就是设计上的冗余,会对使用者造成或多或少的困扰。来看看Go的循环吧。

for i := 0; i < 10; i++ {
}
for a < b {
}
for {
}
</div>

看吧,一个for就搞定所有情况了。来看一个常用的遍历集合,一把来说会写成这样。

count := len(someArray)
for i := 0; i < count; i++ {
    println(someArray[i])
}
</div>

简化这个,Go给出了一个关键字"range",先看用法。

for i, value := range someArray {
    // i 是整型,代表下标
    // value就是数组内值的类型
}
</div>

range不单单可以用于数组,实际上它可以用于任何集合,比如map。

m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
for i, s := range a {
    // type of i is int
    // type of s is string
}
</div>

这里只是提到了几点最基本的语法场景,Go里面还有很多!

 

函数可以返回多个值

其实能够在一行多重赋值的语言挺多的,但一个函数能返回多个值的就很少了,比如在C#里面如果要返回两个int,通常会这么干。

public class TwoInts
{
    public int A;
    public int B;
}
public class Foo
{
    public TwoInts ReturnTwoInt();
}
</div>

然后就可以 TwoInts ti = foo.CalcTwoInt() 觉得悲催吗?也许你都麻木了对吗?很多语言都是这么设计的。函数只能返回一个值最大的问题是会导致出现很多没必要的数据结构。上面就体现了这个冗余,当然,你说可以用out

您可能想查找下面的文章:

  • 使用Go语言实现远程传输文件
  • 深入解析Go语言编程中的递归使用
  • 使用Go语言简单模拟Python的生成器
  • go语言对文件按照指定块大小进行分割的方法
  • 我为什么喜欢Go语言(简洁的Go语言)

相关文章

  • Go语言的GOPATH与工作目录详解
  • Go语言操作redis用法实例
  • Golang极简入门教程(二):方法和接口
  • golang守护进程用法示例
  • 深入理解Go语言中的数组和切片
  • Go语言使用MySql的方法
  • Go语言对字符串进行SHA1哈希运算的方法
  • Go并发编程实践
  • go的websocket实现原理与用法详解
  • go语言单例模式(Singleton)实例分析

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Golang编程实现删除字符串中出现次数最少字符的方法
    • Go项目的目录结构详解
    • 简介Go语言中的select语句的用法
    • go语言实现顺序存储的栈
    • go语言通过odbc操作Access数据库的方法
    • 简单了解Go语言中函数作为值以及函数闭包的使用
    • go语言接口用法实例分析
    • go语言工程结构
    • Go语言并发技术详解
    • go语言通过odbc访问Sql Server数据库的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有