Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285558
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类: C/C++

2013-06-17 22:45:17

一直希望有个语言能像java一样自动管理内存, 又像c一样有指针;昨天偶然在blog首页看到go的介绍, 突然发现自己已经很落伍了,梦想的语言golang已经出来这么久了,自己才知道。 由于对C比较熟,面向对象对java比较熟。所以初步涉及golang,总是想c中的这些表达在golang中怎么来写;

一  HelloWorld

好吧,首先来个hello,world;左边是go, 右边是c;呵呵,大家一看就知道了。

点击(此处)折叠或打开

  1. package main

  2. func main() {
  3.     print("Hello World\n")
  4. }

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. void main()
  3. {
  4.     printf("hello world\n");
  5. }



跟C一样,go 也需要一个main函数;
不同:
  1. 函数多了一个关键字 func;
  2. 第一个{必须紧跟在括号的后面,不能新起一行哦!
  3. 函数print 是go 不过几个内置函数哦。prinf则是stdio中的库函数;
  4. 主函数必须是package main;
  5. 结束的分号可以不写哦。当然你一行就好几句,就不能省了。
  6. 其它不明显的区别暂时不说吧;

二 变量类型

接下来我们看看变量类型吧。go 跟c差不多。有明确的变量类型, 跟javascript比起来都是var 根据运算确定类型,感觉效率总是有问题;有时候甚至自己也不知是什么类型。
go 定义了如下类型  整型:int8, int16, int32, int64 (有符号的。好爽啊,直接表明所占的bit数,不知道是不是有人当初记char,short,int,long的长度也花了时间,现在不要了),无符号,直接加个u,uint8, uint16, uint32, uint64;float就只有float32,float64;当然他们也有int,这个int是32位,还是64位,就要根据机器的为数决定,还有byte=int8;还有一个string类型,暂且认为它跟java中的string差不多吧,就是无法更改其中的某个字符,除非生成一个新的字符串;
好吧,来个加法运算吧;

点击(此处)折叠或打开

  1. package main

  2. func main() {
  3.     var i int
  4.     var j int8
  5.     i = 1
  6.     j=i+1
  7.     print(i,"\t",j)
  8. }



点击(此处)折叠或打开

  1. #include<stdio.h>
  2. void main()
  3. {
  4.     int i;
  5.     char j;
  6.     i=1;
  7.     j=i+1
  8.     printf("%d\t%d\n",i,j);
  9. }



除了第五行,好像其他都不一样阿。
不同:
  1. 变量的声明不同了首先是关键字var, 然后是变量明 i, 然后是类型 int;跟C翻了,还多了一个关键字var;为什么要反过来呢? 官方文档里面介绍了, 为了避免c中的某些疏忽, 也许我们都曾经错过哦! 如:int *a,b; 定了两个不同的类型 a是int *; b 是int; 很容易误解为都是指针哦。 go中就没有问题了 var a, b * int; 呵呵,全部是整型指针;
  2. print也不一样,不同的内容直接用都好隔开,好像没有c的好,特别是当大量文档中插入数字时,要分好多断。有没有类似c的格式化函数呢?让我们慢慢学习吧。
  3. print的参数没有严格要求,既认识i是整型,有认识“\n”是字符串;这一点比C强多了。
  4. 如果编译,会发现左边的第7行有语法错误。因为i的类型和j的类型不同,而c中就没有这么严格了阿。报个warning;而go中则需要明确写成j=int8(i+1); 好像有点烦哦! 注意是int8(i+1) !

三  for

好了,来个for循环吧。

点击(此处)折叠或打开

  1. package main
  2. func main() {
  3.     a := 0
  4.     for i := 1; i < 10; i++ {
  5.         for i := 1; i < 10; i++ {
  6.             a += i
  7.             print(a, "\n")
  8.         }
  9.     }
  10. }
代码有点奇怪,也有点不知道什么意思,是的,没有什么目的, 就是想介绍一下 变量的声明,和作用域, 以及for的写法;
  1. a:=0  是变量声明的一种简写,具体a是什么类型有后面的赋值决定; 这样写只能一次哦。下次要给a赋值需要直接写a=****; 那这个a是什么类型呢? int8, int16。。。?写个小程序试试吧!
  2. 疑? i:= 怎么用了两次呢? 等下面打印的结果你就会发现这两个i不一样阿。各自的作用域都是自己的for循环,第二个i覆盖了第一个i哦!
  3. 再来看看for吧,好像也少了点什么? 对阿。括号没有了。而且必须没有哦; 还有开始的大括号也不能另起一行哦。
嗨是不是有点乱阿。 但是对于咱们这些有基础的老程序员,那有心思去一个一个看说明。 看了好一段,一个程序也写不了。看到后面又把前面的忘了。 好继续; 有这么多, 来冒个泡吧。

四  冒泡罗


点击(此处)折叠或打开

  1. package main

  2. func main() {
  3.     var a = [...]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
  4.     //    var a [10]int = [10]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
  5.     //    var a [10]int = [...]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
  6.     for i := 0; i < len(a); i++ {
  7.         for while := i; while < len(a); while++ {
  8.             if a[i] > a[while] {
  9.                 a[i], a[while] = a[while], a[i]
  10.             }
  11.         }
  12.     }    
  13. i:=0
  14.     for i < len(a) {
  15.         print(a[i], "\t")
  16.         i++
  17.     }
  18. }

  1. 数组的初始化有三种,第一中最简单,具体有几个有编译器自己数,减少了不少程序员的负担。至于后两种,必须是10个哦。否则报错;当然如果你的要求就必须是10个,还是写上数字吧,让编译器帮你检查一下,以防止敲错了!当然还可以写成a:=;
  2. 数组可以求长度了,有点像java了。
  3. 一直有个梦想, 想定义一个变量叫while,怎么也无法实现, 今天go帮我实现了。go中没有while关键字。只有for。用最少的关键字。 go真为程序员作想。
  4. 快看第十行阿。两个变量交换,一句话就完成了,在C中怎么也要三行代码;还有一个中间变量;不是这个是不是一条汇编语句完成的。
  5. 虽然没有while, go 也没有忘记我们的习惯, 将两个分号两边的赋值去掉,for就编程while格式了。对于while(true)则简单了。一个for就完成了。
  6. 16,17行为什么不合并呢?自己试试吧。 语法错误哦。go的文档中说++后面,编译器会自动添加分号。










阅读(18666) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

hacker_cgh2013-06-18 12:49:24

才发现神一样的语言,只是感觉写出来的程序会有点乱吧,缺点也不少,有多大的有点还要待官方给答案啊