Go语言入门学习

jopen 8年前

简单的学习或了解后,发现go可以说吸取了各种语言的精华,并且语法简练,堪称至简至美。尤其在服务器并发性能上有超强的发挥,是七牛公司开发云服务的核心语言。并且性能上比c语言不会逊色多少,但是综合比较,go的优势完全大于c。很多人称是c/c++和python融合,抓住了c的性能,吸取了 python的开发简易度。在此简单介绍下,go语言开发团队作者是1987年图灵奖得主,前贝尔实验室成员,B语言和C语言的设计者,Unix和 plan9的创建者,肯.汤姆逊(Ken Thompson)。其他成员均是plan9在贝尔实验室的原班人马,可谓是大牛出品。

首先从世界著名的hello world小程序开始(go环境大家自己搞定吧),

</div> </div>
    package main          import "fmt"                    func main () {              fmt.Println("Hello World! 你好,世界!")          }    

 

1、package是go的最小分发单位,也是工程管理中依赖关系的体现。

2、import是导入包关键字,由于打印方法属于fmt包,所以在此导入之。

3、main方法是go的入口函数,fmt.Println()是打印输出函数。

 

有了以上的一段代码相信会有了一点感性认识。下面着重讲下go的语言特性,有其他c/c++,python,java等开发经验的朋友相信感触会很深。

1、自动垃圾回收;

2、函数多返回值;

3、优雅的错误处理;

4、匿名函数和闭包;

5、接口(go作者说过一句话,如果让我移植一种功能到其他语言,我会选择接口。可以想象它的与众不同和魅力所在)

6、并发编程;

7、反射;

8、等等,其他特性大家慢慢体会吧。

 

下面说下go的关键字,并简单举例示范:

1、break           //与c等其他语言的break一样的作用,终止循环并跳出,但又有点不一样,慢慢体会;

2、case             //和switch和select一起使用,没看错,select也会也case搭配使用;

3、chan             //信号定义,类似于unix中的管道

4、const            //常量定义

5、continue

6、default

7、defer            //相信有时忘记关闭一个已经打开的文件而让程序出错甚至崩溃的时候,那么defer就可以轻松解决这个问题。

8、else

9、fallthrough  //由于switch和case不像c里一样需要break来跳出,而fallthrough就可以让两个挨着的case连续;

10、for              //for就是for,不过已经完全超越了c中的for

11、func           //定义函数的关键字

12、go              //用于并行编程,简单直接;

13、goto           //go竟然还保留了goto,不过有时用它还是能解决棘手问题;

14、if

15、impor        //导入其他包关键字

16、interface   //定义接口

17、map          //没错,go把map升级为了关键字

18、package   //定义包名

19、range        //迭代用

20、return

21、select       //并发用,监听chan上的数据

22、struct

23、switch       //你懂的,不过已经超出了你的理解,它可以传递字符串,还有更多惊喜;

24、type           //定义新的类型用

25、var             //声明变量

 

基础类型有

bool型:bool

整型:int8、type、uint8、int16、uint16、int32、uint32、int64、uint64、int、uint、uintptr

浮点型:float32、float64

复数:complex64、complex128

字符串:string

字符:rune

错误:error

 

支持的符合类型有

指针(pointer)

数组(array)

切片(slice)

字典(map)

通道(channel)

结构体(struct)

接口(interface)

 

下面示范几个小例子:

</div> </div>
    package main                import (            "fmt"        )                func add(a, b int) int {            return a + b        }                func main() {            result := add(1, 2)            fmt.Println(result)        }  

 

</div> </div>
    package main                import (            "fmt"        )                func sum(values []int) int {            var sum int            for _, value := range values {                sum += value            }            return sum        }                func main() {            values := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}            var result int            result = sum(values)            fmt.Println(result)        }  

    package main                import (            "fmt"        )                func test() func() int {            i := 10            return func () int {                j := 20                i += 100                j += 200                return i + j            }        }                func main() {            f := test()            fmt.Println(f(), f(), f(), f(), f())        }  
</div> </div>