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

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

  背景故事:今天上班略闲(你每天都很闲好嘛!所以钱包很可怜,唉),然后用PHP的时候有点恶心它的全局变量和闭包,又想起了前几天看大神帖子说C已经都快不行了,go和Rust很屌,于是看了下Rust,感觉有点复杂(毕竟是可以编写操作系统的语言。。。),相比之下go则精简许多,然后抽了上午浏览了一遍网上的教程,虽然只是照着写了几个例子,但确实惊叹于语法的简洁(前提是有C语言基础,不然一个指针可能就要被卡死。。。如果有动态脚本语言基础,也能加速理解其中某些部分),感觉这是一门融合了很多语言特色的混合语言。

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

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


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

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

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

]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:=
   return func() int {
      i+=
     return i
   }
}

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

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

go从语法层次支持了goroutine + channel生产者-消费者模式,实现高并发模型!我不知道这一部分是不是和Erlang语言有类似。一般支持高并发的语言都有函数式风格的影子,函数式风格的很多概念非常适合高并发的并行运算。

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

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

Go语言是我见过最简洁的语言(除了lua)的更多相关文章

  1. OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁;

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁: 支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能 ...

  2. Golang笔记(一)简洁的语言风格

    Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...

  3. 【Go语言系列】1.3、GO语言简介:Go语言开发的知名项目

    下面列举的是原生使用Go语言进行开发的部分项目.1.DockerDocker 是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器.Docker 可以在一台物理服务器 ...

  4. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  5. c语言学习笔记(1)——c语言的特点

    一.c语言概述 1.为什么学习c语言? (1)c的起源和发展 第一代语言:机器语言  1101 第二代语言:汇编语言  add ax,bx; 第三代语言:高级语言  a+b; 结构化:c fortra ...

  6. D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

    不要管我的地位和 D 语言创造者之一的身份.我会坦诚的回答这个问题.我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里.我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点 ...

  7. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  8. C语言的本质(7)——C语言运算符大全

    C语言的本质(7)--C语言运算符大全 C语言的结合方向 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左).例如算术运算符的结合性是自左至右,即先左后右.如有表达式 x- ...

  9. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

随机推荐

  1. 微信终端开发团队:新年新语言,WCDB Swift

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:sanhuazhang,此文发布在微信终端开发团队的专栏 WCDB 作为微信的终端数据库,从 2017.6 开源至今,共迭代了 5 个版本 ...

  2. SpringMVC @SessionAttributes注解

    @SessionAttributes 注解只能作用到类上 @SessionAttributes(value={"user"},types={String.class}) @Sess ...

  3. StringMVC @RequestParam属性

    1.jsp: <a href="springmvc/testRequestParam?username=allen&age=sss">test RequsetP ...

  4. 20 Zabbix系统性能优化建议

    点击返回:自学Zabbix之路 20 Zabbix系统性能优化建议 1. Zabbix性能变慢的可能表现: zabbix队列有太多被延迟的item,可以通过administration-queue查看 ...

  5. eclipse常用快捷设置

    1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入"."后才会出现包或类成员的提示,也就意味着我们必须先输入一个完整的类名,提示才能出 ...

  6. 用Vue开发一个实时性时间转换功能,看这篇文章就够了

    前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...

  7. Keepalived概述和安装(1)

    一.Keepalived概述 本文主要了解开源高可用负载均衡集群利器keepalived,掌握keepalived的安装,运用keepalived配置高可用集群,并能够实现keepalived与负载均 ...

  8. Django_ajax

    AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服务器进行异步交互,传 ...

  9. Hadoop伪分布式部署

    一.Hadoop组件依赖关系: 步骤 1)关闭防火墙和禁用SELinux 切换到root用户 关闭防火墙:service iptables stop Linux下开启/关闭防火墙的两种方法 1.永久性 ...

  10. CTF---Web入门第十一题 PHP大法

    PHP大法分值:20 来源: DUTCTF 难度:中 参与人数:8205人 Get Flag:2923人 答题人数:3042人 解题通过率:96% 注意备份文件 解题链接: http://ctf5.s ...