大家一起学Golang——Go语言关键字与基本语法

大家一起学Golang——Go语言关键字与基本语法

Golang25个关键字

关键字 作用 一级分类 二级分类 三级分类
var 变量声明 基本结构 变量与常量
const 常量声明 基本结构 变量与常量 -
package 包声明 基本结构 包管理 -
import 包引用 基本结构 包管理 -
func 函数声明 基本组件 函数 -
return 函数返回 基本组件 函数 -
interface 接口 基本组件 自定义类型 -
struct 结构体 基本组件 自定义类型 -
type 定义类型 基本组件 自定义类型 -
map - 基本组件 引用类型 -
range - 基本组件 引用类型 -
go - 流程控制 并发 -
select - 流程控制 并发 -
chan - 流程控制 并发 -
if - 流程控制 单任务流程控制 单分支流程
else - 流程控制 单任务流程控制 单分支流程
switch - 流程控制 单任务流程控制 多分支流程
case - 流程控制 单任务流程控制 多分流程
default - 流程控制 单任务流程控制 多分支流程
fallthrough - 流程控制 但任务流程控制 多分支流程
for - 流程控制 单任务流程控制 循环控制
break - 流程控制 单任务流程控制 循环控制
continue - 流程控制 单任务流程控制 循环控制
goto - 流程控制 单任务流程控制 -
defer - 流程控制 延时流程控制 -

上面时关于go的关键词其实还是挺少的,不用全看,只看自己不熟悉的,python我平常用的比较多,很喜欢这两个小巧的语言,这里附上go与python语法区别的链接go vs python 大家一起go浪~~

关键字使用方式
  • var
var aa int
var bb = 15
cc := 15
dd,ee := "a","b"
  • const
//声明常量,可以不用声明类型
//全局常量
const a = 13

func main(){
    var b = 1
    var c = int64(20)
    d := a+b
    e := a + c
   ...
}
  • package
    包声明,是指同一文件夹下的文件,包名可以与文件夹名字不同(建议相同)

  • import
    包引用,引用路径是工作区的相对路径。若程序内引用两个不同路径下的相同包名,需要设置别名加以区分。包若是没有在程序中显示调用,则使用下划线 _ 来区分。

  • func
    关于匿名函数必须在函数内部定义,下面时关于函数的几种情况

//根据函数传入参数和返回参数不同进行划分
//有固定⼊参,⽆出参数
func demo1(name string) {
    return
}
//⽆固定入参,无出参数
func demo2(name string, params ...int64) {
    return
}
//无入参,单参数无名称
func demo3() int64 {
    return 0
}
//⽆入参,单参数有名称
func demo4() (age int64) {
    return
}
//⽆入参,多参数无名称
func demo5() (int64,string) {
    return 0,""
}
//⽆入参,多参数有名称
func demo6() (age int64,name string) {
    return
}
  • type/interface/struct
    type声明结构体或者接口
    interface 可以存放任意格式数据和接口定义方法
    struct 结构体定义
import "fmt"

type demo interface{
    func1 (string) int
    func2 (int64) string
}

type demoS struct{}

//demoS的方法,demoS实现了demo接口类型
func(d *demo) func1(string)int{
    return 0
}
func(d *demo) func2(int64)string{
    return ""
}
func demofun(d demoI){
    //d是接口值,这个类型断言检查参数d是否是demoS类型,
    v,t := d.(*demoS)  //又将d转成demoS类型
    fmt.Println(v,t)
}
func main(){
    s := &demoS{}
    demofun(s)
}
  • map
//map是go内置的数据类型 
//下面声明了m1类型,但没有分配内存空间,直接调用会报错
var m1 map[string]int 
//声明并申请了内存空间
m2 := make(map[string]int)
v, ok := m2["k"] //读取时返回值
//这个初始化同时并规定分配的空间大小
m3 := make(map[string]int,10)
  • range
    一般和for配合使用(这个在python中也常见),用来遍历数组,map,string。用起来好方便

  • go
    go语言中自带的并发语句,但不建议处理大文件和cpu密集型运算,可以在写日志和处理大量IO操作使用。

  • select
    每个case后只能进行IO通信操作,只能是发送或接收。
    多个case,go会随机选择并执行,否则select阻塞直到有满足条件的case。
    在 Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用 fallthrough 语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中

  • chan

var c1 chan int64 //nil chan
var c2 = make(chan int64)  //无缓冲
var c3 = make(chan int64, 10) //带缓冲区,chan满时,发生阻塞
var c3 = make(chan <-int64, 10) //只写,这是具有方向的channel
var c3 = make(<-chan int64, 10) //只读
  • goto
    无条件跳转,几乎没什么用,学过汇编的朋友应该熟悉这个。
Loop:
    ...
goto Loop
  • defer
    这个又是go语言中比较有特色的语法,只能用在函数中,在函数执行结束时会调用这个语句,一般作善后工作,比如关闭文件,关闭数据库连接等。用过的人,真香~~
func main(){
    defer fmt.Println("aa")
    defer fmt.Println("bb")
    //结果输出bb  aa ,这个时函数调用的时候这些语句被压入栈中,调用的时候出栈,所以就这个顺序
}
大家一起学Golang——Go语言关键字与基本语法大家一起学Golang——Go语言关键字与基本语法 c0586 发布了29 篇原创文章 · 获赞 5 · 访问量 7381 私信 关注
上一篇:Spring源码分析(1)-Spring容器以及Bean的实例化


下一篇:北京大学肖臻老师《区块链技术与应用》公开课笔记19——ETH数据结构篇3(交易树和收据树)