Go学习笔记(一)

来源:互联网 发布:mac连wifi需要wpa2密码 编辑:程序博客网 时间:2024/06/06 03:23

Go 语言用途


Go是一种编译型语言,它结合了解释型语言的的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。


Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。


默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。当把一个数组作为参数传入函数的时候,传入的其实是该数组的副本,而不是它的指针。


array、slice、map

静态数组、动态数组、无序字典(声明后,在使用前需要初始化)

注意slice和数组在声明时的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符,且slice是引用类型,map也是引用类型。




Go语言核心点:

1.struct

2.面向对象

3.interface

4.并发


除了main包外,其它的包都会生成*.a文件()


Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生就具有多语言的支持 


初始化":="这个符号只能用在函数内部

Go对于已声明但未使用的变量会在编译阶段报错,在这种情况下,可以使用_来丢弃不需要的返回值

Go语言比C更先进的特性,其中一点就是函数能够返回多个值。

Go只有25个关键字
当代码中有很多重复的地方时,不优雅。在defer后指定的函数会在函数退出前调用。defer采用后进先出的模式。

struct不仅仅能将struct作为匿名字段、自定义类型、内置类型都可以作为匿名字段,最外层的优先访问。

指针作为receiver会对实例对象的内容发生操作,而普通类型作为receiver仅仅是以副本作为操作对象,并不对原实例对象发生操作。
如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,自动帮你转。
Go里面的面向对象如此简单,没人任何的私有、共有关键字,通过大小写(大写开头的为共有,小写开头的为私有)

空interface在我们需要存储任意类型的数值的时候相当有用,因为它可以存储任意类型的数值,它有点类似于C语言的void*

Go中字符串是不可变的

在Go中,同时声明多个常量、变量、或者导入多个包时,可采用分组的方式进行声明。


Go 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

一个指针变量通常缩写为 ptr。

查看以下实例:

package mainimport "fmt"func main() {   var  ptr *int   fmt.Printf("ptr 的值为 : %x\n", ptr  )}

以上实例输出结果为:

ptr 的值为 : 0

空指针判断:

if(ptr != nil)     /* ptr 不是空指针 */if(ptr == nil)    /* ptr 是空指针 */


Go 语言Map(集合)

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。