文档章节

go笔记1-helloWorld

_凤求凰_
 _凤求凰_
发布于 2012/10/29 16:03
字数 1105
阅读 778
收藏 3


有一次听一个沙龙技术演讲,讲师说go是互联网时代的c,听了详细介绍以后感觉很赞,尤其是并行层面真正在语言层面上做了控制及特殊的内存管理机制等。。。



好吧,下面上先上helloWorld代码。(以后系列的博客也是以代码为主)



package main //这个是必须的,所有的go文件必须以 package开头

import "fmt"  // ”fmt“是go必须要引入格式化I/O的库。如果要引入多个库import用(  )号包裹所有的库。例如 import ( “fmt” “strconv”)

func main() {    //这是主函数
	fmt.Printf("hello world!")// fmt的Print()函数用于打印
}



这是最简单的一个go程序。



关于go程序的编译跟执行笔者是再win7 64bit机器用的LiteIDE工具,LiteIDE是由国人开发的一款go编译执行开发环境,用起来感觉挺不错的。第一次编译执行go程序需要配置工具的LiteEnv(主要是配置golang下载解压后的目录)



下面说一下go的一些变量定义:


go语言与其他语言不通的地方就是在变量类型放在变量后边 如下:


var i int;

var j bool;

给i跟j赋值


i=10;

j=true;


如果要定义很多变量会需要些 var,go也可以这样定义变量 如下:

var(

  i int

  j bool


golang还有自己的简便写法 变量名:=值  这种方式go会自动根据值定义其类型 如下:

i:=10;

j:=true;


go的int 类型根据硬件他们的长度是不同的,会分文int32 int64 。int int32 int64定义的变量是不可以直接赋值的。需要转换类型。



个人总结起来golang的几大优点:


   1,简洁,go代码很简洁,能在短短的几行代码里做很多东西。代码简洁导致了代码更清晰。对比笔者吃饭用的java来说,减少了很多冗余,毕竟java是以方法为单元的,难免会有冗余。

   2,并发控制好,go再os层面上独自封装了一层叫gorountines的轻量线程,由语言层面进行了并发控制,其他语言来说java也只是在语言层面上做了synchronized加锁控制。虽然java运行在jvm里,但实际上也没有脱离os层面,jvm也会调用os层面的线程。另外笔者熟悉的php,python等也有一些附加的线程库来写并发程序,实际也是调用os层面线程的模型。gorountines是一个轻量的线程,一秒切换的速度是远远快于线程的。

   3,gorountines之间通讯交换数据要用channel完成。golang的并发模型是重新设计的。之前的语言例如java是通过共享来通讯(通过分享一段内存,各个内容之间通过加锁进行控制,这样根据加锁力度会造成程序复杂度会不同),golang是通过通过通讯来共享的,每个并行单元只管理自己的内容,意思是说,在gorountines之间根本就不用显示的进行加锁控制,而且强制通讯成本变低,这样通讯速度就会加快。还有channel是阻塞的。跟c的串行编程思想是一致的。因为channel是阻塞的,所以除了通讯功能之外,还可以用来做同步。(读阻塞,写阻塞)

 4.再就是编译速度快,另外想说的是golang有很严格的规则,如果go程序里引入了没有用到的库,或者定义了一个程序里没有用到的变量,程序是编译不过去的。但是go的错误提示会很详细。

5.变量定义类型是定义在后面 这跟之前的很多大众语言都不一样,导致笔者经常犯这个错误,举例:var str string;

6.go简化并行开发有GC参与其中,这就不用关注需要关闭哪些变量,go会自动帮你做这些工作。类似java,解决c c++程序开发过程最经常用碰到的内存泄露问题。

7.另外go的所有编码都是基于Utf-8的。官方宣传视频讲写go程序会很happy,go用起来的感觉更像linux。。



© 著作权归作者所有

共有 人打赏支持
_凤求凰_

_凤求凰_

粉丝 31
博文 44
码字总数 17451
作品 1
海淀
架构师
加载中

评论(3)

_凤求凰_
_凤求凰_

引用来自“Wendal”的评论

fmt 不是必须的
加上 -ldflags="-w -s" 会小很多

ok。回家试一下。
wendal
wendal
fmt 不是必须的
加上 -ldflags="-w -s" 会小很多
sndnvaps
sndnvaps
用起来不错。
就是编译生成的文件,有点大。
这个不是很好。
Apache CXF 学习资料

更多资料: Apache CXF 客户端调用 超时设置 CXF学习笔记(1)-HelloWorld!-发布webservice CXF学习笔记(2)-HelloWorld!-客户端调用 CXF学习笔记(3)-HelloWorld!-通过servlet发布webservice CX...

梅花扣肉
2016/06/25
84
0
Cocos2dx游戏开发系列笔记3:牛刀小试->忍者飞镖射幽灵的Demo

就是这个例子,应该很简单,主要用到的有:精灵的移动,触摸,碰撞检测。 赶紧搞定,待会还要陪哲哲来几局爱消除。 首先在Scene初始化方法里添加精灵: CCSprite *player =CCSprite::create...

懒骨头
2013/12/09
0
0
Cocos2dx游戏开发系列笔记2:一个刚创建的cocos2dx中的demo里都有什么

烦人的环境终于ok了,改了改文本,换了换图片资源,还是能在手机里运行。ok,关了Eclipse,去vs中看看吧。 虽然是根老骨头了,但还真没怎么用C++,以前接触过点Java的开发框架,估计大差不差...

懒骨头
2013/12/09
0
0
react-native 入门之 helloworld

简介 在网上找了一篇很不错的例子,推荐给大家边学边做 helloworld 首先,我们先创建一个项目,它的原始代码如下,可以看出来主要分为样式和功能两部分,没什么值得留意的 显示效果是这样的 ...

邪人君子
01/20
0
0
1、cocos2dx开发学习第一篇-项目工程的创建

从接触2dx到现在己经半年了,从起初的无知少年到现在还是个无知少年,感觉自己进步的很缓慢,静下心来想了想,觉得自己以前的学习只是看了不作笔记,懂了就懂了,可以这样有个隐患,那就是时...

JanweChan
2014/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
35分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
41分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
今天
2
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部