• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言是我见过最简洁的语言(除了lua)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

写在前面:题目就是个标题党,在这里先道歉,其次撸主学过很多语言(基本上是个语言都要上一下的那种人,但是不会太深入,只做了解,因为很多用不到),但主要使用C#语言(不过已经开始恶心C#的臃肿,不要打我),还有一点:这只是一篇记录我对go语言观后感的博客,只是肤浅的走马观花,并不是go语言的教程!

 

好了,前戏完了,进入正题

  背景故事:今天上班略闲(你每天都很闲好嘛!所以钱包很可怜,唉),然后用PHP的时候有点恶心它的全局变量和闭包,又想起了前几天看大神帖子说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,了解不深,请看管自行研究

/* 定义函数 */
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语言有类似。一般支持高并发的语言都有函数式风格的影子,函数式风格的很多概念非常适合高并发的并行运算。

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

 

因为只是大致的浏览了一遍,很多细节部分并没有太深入,然后也没什么实用经验,只是一个大致的感觉,思维比较混乱,可能会有很多错误的地方,但是我觉得go还是很不错的一门语言,简洁,性能不错,值得学习!(不要吐槽屎一样的排版),因为比较激动的想要把这门不错的语言推荐给大家,所以写的很匆忙(你就是懒得想好嘛!),不足之处,还请不要吹毛求逼,谢谢观看,祝您身体健康(笑)!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C和Lua之间的相互调用发布时间:2022-07-22
下一篇:
Redis进阶实践之七Redis和Lua初步整合使用发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap