[Go语言]一、入门Hello,World

Go简介

为什么有了系统编程级别的C/C++以及后来的Java,也有脚本级别的Ruby/Perl/Python语言可用,Google为什么还要发布Go语言?

“我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧”
                                             --首席软件工程师Rob Pike

Go完全支持coroutine,即协程,也称为轻量级的线程。多数语言在语法层面不直接支持协程。一些语言或许可以通过第三方库来支持协程,但是功能并不完整。比如仅仅提供协程的创建,

销毁和切换能力。如果在这样的协程中调用一个同步IO,如网络通信/本地文件读写,都会阻塞其他并发的协程。从而无法真正的完成协程本身期望的目标。

Go在语言层面就支持协程,叫goroutine。Go语言提供的所有系统调用syscall,包括所有同步IO,都会让出CPU给其他goroutine。

运行方式是

func run (args string) {
    //...
}

func main() {
    go run(“go”)
}

只需要一个go关键字,就可以实现并发的协程运算,是不是很酷。

Go强调风格的强制统一。public的变量必须大写字母开始,private则以小写字母开始,这样就不用显示写出public和private修饰符了。

同时Go对代码块的起始“{”则有强制性要求。如

if expression {
    // 要求如此
}

if expression
{
    //编译错误
}

这里可以明显看出强制性,在C++/JAVA中,两种风格都允许,明显会带来一些风格的不统一。

Go首创的错误处理也很酷,如下看关键字defer的用法

f,err = os.open(filename)
if err != nil {
    log.Println("open failed")
    return
}

defer f.Close()

这里的defer保证在函数退出时候,不管什么原因引起的异常,都会使得f的资源得到释放。

同时Go还支持多个返回值,虽然动态语言Python也支持。

一个defer就彻底让你放弃java中那些嵌套的try…catch…finally。

Go中不支持运算符和操作符的重载,C++/JAVA中提供的重载虽然解决了OOP部分问题,但是带来复杂性。

Go中放弃了构造函数和析构函数,没有虚函数,也没有了vptr,因此原来OOP中对象的开销都降到最小。GO在Google看来,是实战派作风,而不是学院派。

Go接受函数式编程思想,支持goroutine和通道,支持匿名函数和闭包,可以说,在系统级语言方面,Go是最有开放性的一门语言。

Go编程环境搭建

这里首先直接下载安装包:

http://gopher.qiniudn.com/download/go/go1.3.windows-amd64.zip

解压出其中的go顶级目录,拷贝到C下:C:\go。

配置环境变量到path后,就可以在命令行中看到go版本信息了。

Go的编辑器选择有很多种,这里选择sublime。键入Hello,world,运行程序,结束Go学习的入门第一课。

参考书《Go语言编程》:http://www.amazon.cn/s/ref=nb_sb_ss_i_0_6?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B&sprefix=Go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%2Caps%2C173&rh=i%3Aaps%2Ck%3Ago%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B

[Go语言]一、入门Hello,World,布布扣,bubuko.com

时间: 2024-10-11 22:39:18

[Go语言]一、入门Hello,World的相关文章

R语言(入门小练习篇)

问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希望按字母顺序对学生排序. Excel中的数据表(自己一个个敲的,最讨厌做的事情TT) StuId StuName Math Science English 1 John Davis 502 95 25 2 Angela Williams 465 67 12 3 Bull Jones 621 78 2

C语言快速入门系列(六)

C语言快速入门系列(五) C语言指针加强 本节引言: 上一节我们对C语言中的指针进行了初步的了解,学习了指针的定义,与普通变量 一维数组,二维数组,字符串之间的使用!在本节中我们将会学习一些新的知识点, 函数,结构体与共用体,枚举类型以及类型定义符typedef! 本节学习路线图: 本节正文 函数 ps:空函数就是什么都不做的函数,开发过程中不需要马上实现的,先写空函数!简单的空函数:void abc(){   } 结构体 共用体: 代码示例2: 建立一个共用体类型,当输入的时学生类型时,要求输

C语言快速入门教程(二)

C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要:  单词  +  语法!  将单词按照一定的语法拼凑起来就成了一个英语句子了; C语言同样是这样,只不过单词可以理解为一些固定的知识点,而语法可以理解为算法(可以理解为解决问题的方法) 在这一节中我们就对固定知识点中的语言描述与数据存储进行解析! 1.C语言的基本元素 1.1  标识符 什么是标识符? 答:在C语言中,符号常量,变量,数组,函数等都需

C语言快速入门系列(一)

C语言快速入门系列(一)  本系列引言: 本教程的宗旨是将C语言入门的内容进行关键知识点的提纯,将一些笼统的废话去除; 再进行压缩,然后将本章的关键知识点做成路线图的,可以更加方便地掌握学习的方向; 最后提供相关的代码示例以及详细注释,可以帮助学者更快地上手C语言! 如果对本教程有什么建议和缺点纰漏的,欢迎指出,不胜感激! 本节学习路线图: 正文: 1.计算机与程序设计语言的关系: 答:计算机是由硬件与软件系统组成,硬件==>物质基础;软件==>灵魂; 如果脱离了软件,计算机就只是一台什么都做

C语言快速入门教程(一)

C语言快速入门教程(一) C语言概述(开发准备) 本节学习路线图: ps:标记3的表示不是很重要,知道有这个东西就行了;标记1表示非常重要,需要熟练掌握! 1.C语言的概述: 1.1  计算机与程序设计语言之间的关系? 答:计算机是由硬件与软件系统组成的;硬件---->物质基础;软件----->灵魂; 如果脱离了软件,计算机就是一台什么都做不了的裸机; 可以形象地比喻成人的大脑和身体;两个互不可缺! 1.2  程序设计语言的更新换代: 1.3 C语言的特点 1.4  最简单的HelloWorl

Swift语言高速入门

Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 2014年10月出版 定价:59.00元 428页 16开 编辑推荐 本书内容翔实,实例丰富,同步新版官方API文档和语法 语法|词法|框架覆盖全面,实战案例|配套习题丰富 多位Swift专家联合推荐,不仅是Swift入门书籍,也可做案头工具书 作者携手Swift专家在线答疑,方式例如以下: 1.专属勘误

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同

SQLite3 C语言API入门

下载SQLite3 我们下载sqlite源码包,只需要其中的sqlite3.c.sqlite.h即可. 最简单的一个创建表操作 #include <stdio.h>#include "sqlite3.h"int main(int argc,char *argv[]){    const char *sql_create_table="create table t(id int primary key,msg varchar(128))";    char

IOS开发语言Swift入门连载---可选链

IOS开发语言Swift入门连载-可选链 可选链(Optional Chaining) 是一种可以请求和调用属性.方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为空(nil ).如果可选的目标有值,那么调用就会成功:相反,如果选择的目标为空(nil ),则这种调用将返回空(nil ).多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil )将导致整个链失效. 注意: 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift 可以使用在任意类型中

IOS开发语言Swift入门连载---类型转换

IOS开发语言Swift入门连载-类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 类型转换在 Swift 中使用is 和 as 操作符实现.这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型. 你也可以用来检查一个类是否实现了某个协议,就像在 Checking for Protocol Conformance部分讲述的一样. 定义一个类层次作为例子 你可以将它用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的