一直希望有个语言能像java一样自动管理内存, 又像c一样有指针;昨天偶然在blog首页看到go的介绍, 突然发现自己已经很落伍了,梦想的语言golang已经出来这么久了,自己才知道。 由于对C比较熟,面向对象对java比较熟。所以初步涉及golang,总是想c中的这些表达在golang中怎么来写;
跟C一样,go 也需要一个main函数;
不同:
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差不多吧,就是无法更改其中的某个字符,除非生成一个新的字符串;
好吧,来个加法运算吧;
除了第五行,好像其他都不一样阿。
不同:
代码有点奇怪,也有点不知道什么意思,是的,没有什么目的, 就是想介绍一下 变量的声明,和作用域, 以及for的写法;
一 HelloWorld
好吧,首先来个hello,world;左边是go, 右边是c;呵呵,大家一看就知道了。
点击(此处)折叠或打开
|
点击(此处)折叠或打开
|
跟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差不多吧,就是无法更改其中的某个字符,除非生成一个新的字符串;
好吧,来个加法运算吧;
点击(此处)折叠或打开
|
点击(此处)折叠或打开
|
除了第五行,好像其他都不一样阿。
不同:
- 变量的声明不同了首先是关键字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")
- }
- }
- }
- 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的文档中说++后面,编译器会自动添加分号。
有疑问加站长微信联系(非本文作者)