package
-
-
统一包下不能有相同函数
-
-
包的三个作用
-
区分相同名字的函数和变量等标识符
-
管理项目
-
控制函数,变量等的访问范围,即作用域。
-
func
-
go不支持重载,函数也是一种数据类型,可以赋值给一个变量
-
-
GO支持可变参数
-
-
init()函数
-
导包时加载顺序
内置函数
-
-
len():用来求长度,比如len(str),len(array)
-
new ():用来分配内存,主要是分配值类型,比如int,float32,struct....返回的是指针
-
make:用来分配nei内存,主要是分配引用类型,比如channel,map,slice eg:make(map[string]string,3)
-
-
Array
-
数组的初始化四种方式:第一种完全定义,第二种省略类型,第三,四种省略类型和数组长度,直接赋值。
-
数组的遍历方式:for-range:for index, value := range array{.......}(index和value变量可改,但是表示的是下标和值)
-
-
slice(切片)
-
-
-
切片类似java种的ArrayList,可变长数组
-
切片的定义:var 切片名 []类型 eg:var a []int
-
切片的使用:
-
第一种,定义一个切片,然后让切片去引用已经创建好了的数组。类似于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
-
-
基本语法 var 变量名 map[keytype]valuetype (声明不会分配内存,初始化需要make,分配内存后才能使用) eg: var a map[int]string a=make(map[string]string,10)
-
map的三种使用方式
-
key一般为int类型或者string类型
-
value经常使用struct类型(类似java中的class)
-
-
struct
-
结构体是自定义的数据类型,代表一类事物的抽象,和java中的class
-
基本语法
type 结构体名称 struct{
field1 type
field2 type
}
eg: type Student struct{
Name string
Age int
Score float32
}
-
结构体字段也就是结构体的属性,可以是值类型也可以是引用类型
-
指针,slice,map的零值都是nil,(nil相当于java中的null)
-
结构体方法的声明和调用:
-
type A struct{
Num int
}
func (a A)test(参数列表)(返回值列表){
fmt.Println(a.Num)//方法体
return 返回值
}
-
-
如果一个类型实现了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
-
golang的并发机制是利用协程,线程是作用在cpu上的,重量级的,很耗cpu资源,协程是逻辑态的消耗资源相对较小。
-
golang的线程MPG模式运行状态
-
协程之间通过互斥锁保持通讯:sync(同步)包下的Mutex(互斥锁)确保通讯同步。
待更新,望给位看官,多多提意见,看法,相互交流才有更快更好的成长。