基本类型
bool
string
有符号整数
int8,int16,int32,int64
无符号整数
uint8,uint16,uint32,uint64
byte =uint8的别名
rune =int32的别名,表示一个Unicode码点
平台相关性类型
类型 | 32位系统 | 64位系统 |
---|---|---|
int | int32 | int64 |
uint | uint32 | uint64 |
uintptr | uint32 | uint64 |
浮点数类型
float32
float64
复合类型
complex64,complex128
结构体
type [名称] struct{}
自定义类型
type CusInt int
指针类型
*type
数组
[n]T ,go语言中数组是固定大小的
切片
[]T,切片与数组几乎一样,唯一不同的是切片大小是不固定的,数组可以很容易转换成切片,反过来则不行
方法和接口
函数
// 再任何一个go文件中如下代码就定义了一个方法
func Method(){
}
//go支持方法有多个返回值,当你不关心其中某个返回值时可以使用_忽略它
func Method() (string,error){
return "",nil
}
// 忽略返回值
_,_:=Method()
复制代码
可变参数的方法
// ...type表示方法接收一个type类型的数组,且数组的大小是可变的,由调用者传入参数的个数决定
func Method(args ...type){
print(len(args))
}
复制代码
接口
虽然go没有class的概念,但interface的概念得以保留,接口类型通常用于行为约束,在go中也不例外,不过接口在go中一个很有用的地方就是它可以作为任意类型(空接口)使用,如下:
// 直接使用interface关键字定义任意类型变量
var i interface{}=1
var s interface{}="string"(i)
//但i,s变量并不能直接使用,以下是错误用法
print(i)
print(s)
//正确的用法如下:
i:=i.(int) //这种方式在go中叫做断言,如果i不是int类型则导致程序崩溃(在switch语句中除外)
//通常,如下的方法是更安全的做法,参数ok用来表明断言是否成功
i,ok:=i.(int)
if(ok){
print(i)
}
复制代码
在go中用interface{}声明的变量,返回的是变量的地址即指针类型,如果要获得指针指向的具体值需要通过i.(type)
即断言的方式。
声明一个接口类型
在go中编译器并不强制子类实现接口,也就是说这一实现过程是隐式完成的
// 这里定义了一个People接口类型,并指定该接口有一个Name方法的约束
type People interface{
Name()
}
复制代码
实现接口
type ManPeople struct{}
func (people ManPeople) Name(){}
// 如果ManPeople没有实现People的Name方法则不能通过编译前代码检查
var people People=ManPeople{}
复制代码
通过接口实现方法可变任意类型的参数
// 该Method方法将接收任意个任意类型的参数
func Method(args ...interface{}){
}
// 该Method仅接收任意个数的People类型的参数
func Method(args ...People){
}
复制代码
面向对象
在go中没有class的概念,通常我们的代码都是从struct开始的,模拟一个类在go中也是很容易的
// 首先我们定义一个结构体,结构体描述了数据在内存中是如何存储的
type People struct{
Name string
}
// 通过如下放方式我们可以创建一个实例
people:=People{}
people.Name="Name"
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END