golang基础全篇(适合已有编程语言经验的猿们)

  • package

    1. 统一包下不能有相同函数


       

  •     包的三个作用

    • 区分相同名字的函数和变量等标识符

    • 管理项目

    • 控制函数,变量等的访问范围,即作用域。

 

  • func

  • go不支持重载,函数也是一种数据类型,可以赋值给一个变量

        

  •     

  • GO支持可变参数

    • init()函数

                  导包时加载顺序

                 

内置函数

    1. len():用来求长度,比如len(str),len(array)

    2. new ():用来分配内存,主要是分配值类型,比如int,float32,struct....返回的是指针

    3. make:用来分配nei内存,主要是分配引用类型,比如channel,map,slice                   eg:make(map[string]string,3)

 

  • Array

    1. 数组的初始化四种方式:第一种完全定义,第二种省略类型,第三,四种省略类型和数组长度,直接赋值。

    2. 数组的遍历方式:for-range:for index, value := range array{.......}(index和value变量可改,但是表示的是下标和值)

 

 

  • slice(切片)

      1. 切片类似java种的ArrayList,可变长数组

      2. 切片的定义:var 切片名 []类型      eg:var a []int

      3. 切片的使用:

        • 第一种,定义一个切片,然后让切片去引用已经创建好了的数组。类似于java中数组转集合

        • 第二种,通过make来创建切片,类似java中new ArrayList()这种操作。     

                   eg:var 切片名 []tpye = make([]type ,len,[cap])

        参数说明:type就是数据类型,len:大小,cap:指定切片容量,可选,如果分配了cap则cap,必须大于len

    • 切片初始化时 var slice = arr[0:len(arr)],如果是从数组第一个或者最后一个开始、结束,可省略相应位置的角标。(包含头不包含尾)

      eg:var slice = arr[:end]    var slice = arr[start:]    var slice = arr[:] 

  • map         

    1. 基本语法   var 变量名  map[keytype]valuetype (声明不会分配内存,初始化需要make,分配内存后才能使用)              eg: var a map[int]string  a=make(map[string]string,10)

    2. map的三种使用方式

    3. key一般为int类型或者string类型

    4. value经常使用struct类型(类似java中的class)

    

  • struct

    1. 结构体是自定义的数据类型,代表一类事物的抽象,和java中的class

    2. 基本语法

      type 结构体名称 struct{

             field1 type

             field2 type

      }

      eg: type Student struct{

                    Name string

                    Age int

                    Score float32  

              }

    3. 结构体字段也就是结构体的属性,可以是值类型也可以是引用类型

    4. 指针,slice,map的零值都是nil,(nil相当于java中的null)

    5. 结构体方法的声明和调用:

      • type A struct{

             Num int

        }

        func (a A)test(参数列表)(返回值列表){

               fmt.Println(a.Num)//方法体

               return 返回值

        }

    6. 如果一个类型实现了String()string 方法,fmt.Println()会默认调用变量的这个变量的String()方法进行输出(类似java中的类型实现toString()方法),返回值是string

  • interface

  • golang中的接口的实现不需要显式声明,只需要实现接口所有的方法即可实现接口。(java中需要用implements显式声明)

  • 基本语法:type 接口名 interface{

                           mothed(参数列表)返回值列表

                     }

    func (自定义类型)mothed(参数列表)返回值列表{}

  • 接口可以继承接口,实现该接口时需要将其继承的接口方法也一起实现。

 

  • 断言

类型断言:一般是将接口的实例转成具体类型,这时候就需要断言。(类似java的强转)

如果断言时类型不匹配就会报panic,成功则返回ok

  • 封装

    • go中的方法和属性,通过首字母大小写判定方法属性使用范围,首字母大写的为public方法属性,首字母小写的为私有方法属性,通过将方法属性私有,提供方法属性的public方法实现封装

    • eg:,将struct和对应的属性全部设置为了私有,提供了public的方法设置属性和获取属性。这样不能直接通过结构体.属性的形式设置和获取属性。

  • 继承

  • go中的继承有点类似于引用,将父结构体嵌套进字结构体,实现继承。

  • 嵌套匿名结构体基本语法:(注意:匿名嵌套结构体不能有属性名,不然变成了组合)

  • 多重继承时,如果嵌入的结构体有相同的属性或者方法,需要通过结构体类型名来调用,但继承可以直接使用属性或者方法(当前结构体有就会调用当前结构体的,没有就会找嵌入的结构体中的)

  • goroutine

  1. golang的并发机制是利用协程,线程是作用在cpu上的,重量级的,很耗cpu资源,协程是逻辑态的消耗资源相对较小。

  2. golang的线程MPG模式运行状态

  3. 协程之间通过互斥锁保持通讯:sync(同步)包下的Mutex(互斥锁)确保通讯同步。

待更新,望给位看官,多多提意见,看法,相互交流才有更快更好的成长。

 

你可能感兴趣的:(golang基础全篇(适合已有编程语言经验的猿们))