Go是我见过最简洁而又强大的语言

小说:微信红包群不要押金作者:丁董更新时间:2018-10-22字数:83693

这个时候,龙岛上的众人都能够看到这个火球,如同太阳一般炽热。孙艺维和丽萨娜的脸上露出了一副担忧之色,这爆炸实在是太震撼人心了,不知道叶扬到底有没有跑出来呢。

360挂机能赚钱

牛魔王和青丘急忙闪躲,那菩萨动作只施展了一半,却戛然而止,宝瓶中毒液恰好淋了自己满头满脸,只见一个宝相庄严的菩萨瞬间化为飞灰,而青丘眼尖,早见到这菩萨胸前插了一支小小的羽箭。
“啊!”火寻海大惊失色,连忙跪下对纪太虚说道:“将军饶命,饶命啊!”

而站在手术台前的几个人则是一脸的兴奋,其中那个主刀的家伙说道:“赶紧将这一刻记录下来,我们所研究的铃虫马上就要成功了。”

  最近看大神帖子说C已经都快不行了,go和Rust很屌,于是看了下Rust,感觉有点复杂(毕竟是可以编写操作系统的语言。。。),相比之下go则精简许多,然后抽了一上午浏览了一遍网上的教程,虽然只是照着写了几个例子,但确实惊叹于语法的简洁(前提是有C语言基础,不然一个指针可能就要被卡死,如果有动态脚本语言基础,也能加快理解其中某些部分),一下子喜欢上了这门简洁而又强大的语言,感觉这是一门融合了很多语言特色的混合语言!

  • 第一部分,C语言过程式风格(过程式与函数式风格是两个对立的编程模型)

大概因为go语言的设计者,跟C语言有点渊源,所以基本的变量,函数定义这些,还是有着很浓重的C风格,还有struct,变量的作用域跟C语言保持一致,基本的流程控制也大致相同,顺便吐槽下,为什么博客园的编辑器的代码编辑里没有go语言!有一个比较重要的点,学过C的人都知道,C语言的强大,很大部分源于指针,可以直接操作硬件地址!go里面也有指针,跟C里的虽然用法差不多,但是不需要自己分配释放内存,因为有垃圾回收(太特码良心啦!)

var a int = 10
var b = 10
c : = 10
var a int= 20   /* 声明实际变量 */
var ip *int        /* 声明指针变量 */
ip = &a  /* 指针变量的存储地址 */

//结构体
type Books struct {
   title string
   author string
   subject string
   book_id int
}
  • 第二部分,基础的数据结构

跟其他语言类似,支持数组,切片(列表),字典(map)

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}  //一个float数组
//字典
var countryCapitalMap map[string]string
   /* 创建集合 */
   countryCapitalMap = make(map[string]string)
   
   /* map 插入 key-value 对,各个国家对应的首都 */
   countryCapitalMap["France"] = "Paris"
   countryCapitalMap["Italy"] = "Rome"
   countryCapitalMap["Japan"] = "Tokyo"
   countryCapitalMap["India"] = "New Delhi"
  • 第三部分,面向对像

这部分语法和普通语言(C#,JAVA)区别有点大,但本质是一个东西,是在struct上额外的添加函数(叫方法),比较特别的是它有一个interface,了解不深,请看官自行研究,目测也是个很强悍的东西(ducktype)

/* 定义函数 */
type Circle struct {
  radius float64
}

//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * c.radius * c.radius
}
  • 第四部分,函数式(脚本语言)风格

PHP,js这类脚本语言都会有闭包这个概念(这个其实是函数式编程风格的特色),匿名函数(好吧,C#里面也有,Lamdba表达式),go语言里面也有,还支持函数返回多个值!!!

a, b = b, a//直接交换两个值,是不是很眼熟,很多脚本语言是可以这样的!!!
//闭包
func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

/* 声明函数变量 ,函数可以直接复制给变量*/
getSquareRoot := func(x float64) float64 {
    return math.Sqrt(x)
}

/* 使用函数 */
fmt.Println(getSquareRoot(9))
  • 第五部分,语言独特部分——高并发

go从语法层次支持了goroutine(协程) + channel生产者-消费者模式的高并发模型!和Erlang语言类似,面向消息编程思想而不是其他语言的共享内存(这就必须引入共享锁,导致无法高并发!),C#的async和wait有点这个味道。最终编译结果为exe,可以直接运行,就问你怕不怕!!!

//一个最基本的例子
func main() {
    chan1 := make(chan int)//生成一个channel,相当于一个消息队列
    go func() {  //运行一个goroutine,大概类似于线程,但不是一个东西
        chan1 <- 1 //放入数据
    }()
    fmt.Println(<-chan1) //读取显示数据,会等待上面那个函数放入数据
}
  •  第六部分,其他还没有了解的东西。。。

 

结论:由此可见,go语言堪称集语言之大成者(极有可能成为未来的语言霸主,还有一个霸主大概是javascript),同时保持了简洁和性能,不得不让人惊叹!

 

这是一篇我对go语言观后感,并不是go语言的教程!因为只是大致的浏览了一遍,很多细节部分并没有太深入,也没什么实用经验,只是一个大致的感觉,思维比较混乱,可能会有很多错误的地方,但是我觉得go还是很不错的一门语言,简洁,性能不错,值得学习!

编辑:安华

发布:2018-10-22 09:04:23

当前文章:http://www.leetaemin.cn/ask/question_34863.html

现在零成本赚钱门路 可儿网赚博客 2018冷门暴利行业 招聘在家兼职打字 福州兼职招聘临时工 哈尔滨兼职 下班做点小生意 网上赚欧元

56364 12209 72814 49101 73214 8009476591 29176 55284

我要说两句: (0人参与)

发布