Go:基础知识(一)

上一篇:Go:简介和特点

下一篇:Go:基础知识(二)


概述

本文将介绍Go语言的一些基础知识,目的是想针对初学者,能对Go的基础词法和语法有个简单的认识,具体使用会在后面结合代码详细介绍。


一、Go标识符

标识符是用来标识编程语言语法对象的符号,假如编程就像是在玩乐高积木,标识符就是一块块基础积木形状,玩家除了可以使用厂家提供的基础积木块,也可以将N个积木块组合成基础形状自定义。换句话说,标识符一般分为两种,一种是程序设计者预声明的标识符,一种是程序开发者自定义的标识符,通常自定义的标识不能与预声明的标识符一样,否则编译不能通过。

Go语言预声明的标识符包含:

  • 关键字(25个)
  • 内置数值类型标识符(20个)
  • 内置常量标识符(4个)
  • 内置函数标识符(15个)
  • 空白标识符(1个)

下面简单的聊聊这些预声明的标识符。

1.1 关键字

上篇谈到Go一直在追求极简的风格,Python保留的关键字大约30多个,而Go的关键字只预声明了25个:

break     default      func    interface  select
case      defer        go      map        struct
chan      else         goto    package    switch
const     fallthrough  if      range      type
continue  for          import  return     var

这里挑几个Go特色的关键字简单聊聊,不清楚的没关系,后面还会具体聊聊用法,这里给初学者总体感受一下Go的代码风格。

interface

在Go中,接口是一组方法签名(声明的是一组方法的集合)。当一个类型为接口中的所有方法提供定义时,它被称为实现该接口。

基本用法:

// interface基本用法
type Person interface {  // 定义一个Person接口
	Talk() string
	Think() string
}

func Test(var interface{}){
	// 定义一个Test函数,入参为interface{}类型
}

这里我们定义了一个Person的接口,包含两种方法,Talk()和Think(),这就是整个Go语言核心的部分之一,对比面向对象或者面向类的编程抽象设计,Go不需要具体的数据类型或者元素去进行抽象设计,而是通过一组方法抽象,Person是包含Talk()和Think()的方法的接口,也就是只要包含了Talk()和Think()方法的对象都可以是Person接口,这就是”Duck模型“,在Go里面,只要有翅膀,会叫的东西都可以叫鸭子,后面我们会具体聊聊Go的interface。


select

select就是用来监听和channel有关的IO操作,当 IO 操作发生时,触发相应的动作。

基本用法:

// select基本用法
select {
case <- chan1:
// 如果chan1成功读到数据,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,则进入default处理流程

defer

defer是Go预声明的标识符,Python里面也有defer,但需要导入defer库,两者作用相似。Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行,Go的defer一般用于释放某些已分配的资源。

基本用法:

// defer基本用法
func Read(idx int) string {
	mutex.Lock() // 读数据前先互斥锁锁住
	defer mutex.Unlock() // 锁住后立马用defer标记互斥锁释放语句,defer语句会在程序结束时执行,这样避免了开发者忘记添加释放语句
	return value[idx]
}

var

var一般用于变量的声明,Go的变量声明一般有两种方式:

// var基本用法

// var用于显示的完整声明
var a int
var b int = 1

// 另一种短类型声明,不需要指定变量c的类型,编译器会自动进行数据类型推断
c := 2

1.2 内置数值类型标识符

Go语言是一门强类型的静态编译语言,在定义常量或者变量的时候需要显示的定义出数据类型,当然Go也支持自动类型推断,如上变量c的命名方式。Go语言总共保留了20个内置数值类型标识符:

// 整型 12个
byte int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr

// 浮点型 2个
float32 float64

// 复数型 2个
complex64 complex128

// 字符串和字符 2个
string rune

// bool型 1个
bool

// 接口型 1个
error

1.3 内置常量标识符

true false // bool型两个常量
iota       // 连续枚举值声明
nil        // 空指针/引用类型

iota

Go的iota是一个比较奇怪的存在,它只能用在const的申明中,是一个从0开始的行数索引器,默认递增。

// iota基本用法
const(
	a = iota  // a = 0
	b         // b = 1
	c         // c = 2
	d         // d = 3
)

const(
	a = iota*2  // a = 0*2
	b           // b = 1*2
	c           // c = 2*2
	d           // d = 3*2
)

1.4 内置函数标识符

// 内置函数标识符 15个,不需要import导入,全局可见性
make new len cap append copy delete panic 
recover close complex real image print println

1.5 空白标识符

// 空白标识符

// 定义一个GetValue方法,返回一个整型和error
func GetValue() (int,error) {
	return 1, nil
}

func main() {
	// 调用GetValue()方法
	// 但暂时用不到error返回值,可以用"_"空白标识符代替
	a, _ := GetValue()
}

Go的空白标识符"_"也是个很有意思的存在,由于Go不允许存在没有使用的包和变量,对于那些不想使用的变量可以用空白标识符代替。

上一篇:Go:简介和特点
下一篇:Go:基础知识(二)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值