GO成神之路: 转Go语法精简|Go主题月

基本类型

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
喜欢就支持一下吧
点赞0 分享