一直希望有个语言能像java一样自动管理内存, 又像c一样有指针;昨天偶然在blog首页看到go的介绍, 突然发现自己已经很落伍了,梦想的语言golang已经出来这么久了,自己才知道。 由于对C比较熟,面向对象对java比较熟。所以初步涉及golang,总是想c中的这些表达在golang中怎么来写;
一 HelloWorld
好吧,首先来个hello,world;左边是go, 右边是c;呵呵,大家一看就知道了。
-
package main
-
-
func main() {
-
print("Hello World\n")
-
}
|
-
#include<stdio.h>
-
void main()
-
{
-
printf("hello world\n");
-
}
|
跟C一样,go 也需要一个main函数;
不同:
-
函数多了一个关键字 func;
-
第一个{必须紧跟在括号的后面,不能新起一行哦!
-
函数print 是go 不过几个内置函数哦。prinf则是stdio中的库函数;
-
主函数必须是package main;
-
结束的分号可以不写哦。当然你一行就好几句,就不能省了。
-
其它不明显的区别暂时不说吧;
二 变量类型
接下来我们看看变量类型吧。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差不多吧,就是无法更改其中的某个字符,除非生成一个新的字符串;
好吧,来个加法运算吧;
-
package main
-
-
func main() {
-
var i int
-
var j int8
-
i = 1
-
j=i+1
-
print(i,"\t",j)
-
}
|
-
#include<stdio.h>
-
void main()
-
{
-
int i;
-
char j;
-
i=1;
-
j=i+1
-
printf("%d\t%d\n",i,j);
-
}
|
除了第五行,好像其他都不一样阿。
不同:
-
变量的声明不同了首先是关键字var, 然后是变量明 i, 然后是类型 int;跟C翻了,还多了一个关键字var;为什么要反过来呢? 官方文档里面介绍了, 为了避免c中的某些疏忽, 也许我们都曾经错过哦! 如:int *a,b; 定了两个不同的类型 a是int *; b 是int; 很容易误解为都是指针哦。 go中就没有问题了 var a, b * int; 呵呵,全部是整型指针;
-
print也不一样,不同的内容直接用都好隔开,好像没有c的好,特别是当大量文档中插入数字时,要分好多断。有没有类似c的格式化函数呢?让我们慢慢学习吧。
-
print的参数没有严格要求,既认识i是整型,有认识“\n”是字符串;这一点比C强多了。
-
如果编译,会发现左边的第7行有语法错误。因为i的类型和j的类型不同,而c中就没有这么严格了阿。报个warning;而go中则需要明确写成j=int8(i+1); 好像有点烦哦! 注意是int8(i+1) !
三 for
好了,来个for循环吧。
-
package main
-
func main() {
-
a := 0
-
for i := 1; i < 10; i++ {
-
for i := 1; i < 10; i++ {
-
a += i
-
print(a, "\n")
-
}
-
}
-
}
代码有点奇怪,也有点不知道什么意思,是的,没有什么目的, 就是想介绍一下 变量的声明,和作用域, 以及for的写法;
-
a:=0 是变量声明的一种简写,具体a是什么类型有后面的赋值决定; 这样写只能一次哦。下次要给a赋值需要直接写a=****; 那这个a是什么类型呢? int8, int16。。。?写个小程序试试吧!
-
疑? i:= 怎么用了两次呢? 等下面打印的结果你就会发现这两个i不一样阿。各自的作用域都是自己的for循环,第二个i覆盖了第一个i哦!
-
再来看看for吧,好像也少了点什么? 对阿。括号没有了。而且必须没有哦; 还有开始的大括号也不能另起一行哦。
嗨是不是有点乱阿。 但是对于咱们这些有基础的老程序员,那有心思去一个一个看说明。 看了好一段,一个程序也写不了。看到后面又把前面的忘了。 好继续; 有这么多, 来冒个泡吧。
四 冒泡罗
-
package main
-
-
func main() {
-
var a = [...]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
-
// var a [10]int = [10]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
-
// var a [10]int = [...]int{10, 25, 32, 11, 6, 36, 18, 22, 5, 7}
-
for i := 0; i < len(a); i++ {
-
for while := i; while < len(a); while++ {
-
if a[i] > a[while] {
-
a[i], a[while] = a[while], a[i]
-
}
-
}
-
}
-
i:=0
-
for i < len(a) {
-
print(a[i], "\t")
-
i++
-
}
-
}
-
数组的初始化有三种,第一中最简单,具体有几个有编译器自己数,减少了不少程序员的负担。至于后两种,必须是10个哦。否则报错;当然如果你的要求就必须是10个,还是写上数字吧,让编译器帮你检查一下,以防止敲错了!当然还可以写成a:=;
-
数组可以求长度了,有点像java了。
-
一直有个梦想, 想定义一个变量叫while,怎么也无法实现, 今天go帮我实现了。go中没有while关键字。只有for。用最少的关键字。 go真为程序员作想。
-
快看第十行阿。两个变量交换,一句话就完成了,在C中怎么也要三行代码;还有一个中间变量;不是这个是不是一条汇编语句完成的。
-
虽然没有while, go 也没有忘记我们的习惯, 将两个分号两边的赋值去掉,for就编程while格式了。对于while(true)则简单了。一个for就完成了。
-
16,17行为什么不合并呢?自己试试吧。 语法错误哦。go的文档中说++后面,编译器会自动添加分号。
阅读(18666) | 评论(2) | 转发(1) |