Go语言语法汇总

最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考

数据类型


  • var varName typevar var1,var2… typevar varName type = Valuevar varName1,varName2 type = Value1,Value2var varName1,varName2=Value1,Value2varName1,varName2:=Value1,Value2,定义数据类型。
  • 声明了没有被使用的变量将在编译时报错。
  • 常量定义: const varName = Value , const varName type = Value
  • string字符串类型值不可改变,但是可以切片,字符串可以使用+进行连接
  • iota用来声明enum,表示自加1,初始为0
  • var arrayName [N]type用来声明数组,或者使用 arrayName := [N]type{ v1,v2…}来声明
  • 数组声明可以嵌套
  • slice用来表示切片,声明方式var sliceName []type或者sliceName := []type{v1,v2…}
  • slice保存的是引用而非实体
  • slice中有一些内置函数,len获取长度,cap获取最大容量,append追加数据,copy用来拷贝数据
  • map声明方式为var mapName map[keyType] valueType或者mapName := make(map[keyType]valueType)
  • map可通过 key : value 初始化
  • make用于内建类型的内存分配,new用于各种类型的内存分配,new返回指针而make返回非0的值

流程控制


  • if语句不需要括号,在if语句中可以声明变量,用分好分割if语句的条件判断 if x:=function();x<10 { fmt.Printf("x < 10,%d\n",x); }else{ fmt.Print("x >= 10 ,%d\n",x); }
  • goto语句类似C语言,但是跳转到必须在当前函数内定义的标签
  • for语句类似C语言,但是breakcontinue可以跟标号,跳出多重循环。
  • switch语句不用break,如果想强行执行下面的case可以使用fallthrough

函数


声明方式:

func funcName(input1 type1, input2 type2) (output1 type1, output2 type2)
  • func用来声明函数,函数名为funcName,后面跟输入,输出的数据类型。
  • 函数可以有多个返回值
  • 函数的值操作和指针操作类似C语言,内置类型中的string,slice,map直接使用的是类似的指针传递,不用使用取地址符,但是,如果需要改变slice的长度,则需要取地址穿指针。
  • defer语句用来表示在函数返回前执行的语句。
  • type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])用来声明一个函数类型,主要用于高阶函数中。
  • import用来导入包,package用来导出包,包操作使用.操作符

Struct类型


  • 声明方式: type Person struct { name string age int }
  • 匿名方式,匿名方式下A含有B的所有类型 type Student struct { Person // 默认Person的所有字段 speciality string }
  • 如果匿名类型中有字段和本身有冲突,可以使用匿名类型+.访问
  • 类型的方法声明: func (r ReceiverType) funcName(parameters) (results)
  • 可以使用:type typeName typeLiteral来自定义类型,定义完以后可以使用方法来扩展类型的功能。
  • 需要改变struct内部的值时,需要将ReceiverType定义为*指针类型,但是调用的时候不需要,go语言自动帮你完成了。
  • 方法可以继承,可以重载

interface接口


  • type InterfaceName interface用来定义inerface
  • interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
  • 空interface(interface{})不包含任何的method,正因为如此,所有的类型都实现了空interface
  • 一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值
  • value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,elementinterface变量,T是断言的类型,如果oktrue则表示,element确实是T类型的。
  • interface可以嵌套

并发


  • 使用go关键字+函数名实现并发
  • 使用channel实现线程间通讯,channel通过make构造,使用<-来发送和接受数据。
  • chanchannel的关键字,后面跟数据类型ch <- v发送数据,v:=<-ch接收数据,chchan类型。 package main import "fmt" func sum(a []int, c chan int) { total := 0 for _, v := range a { total += v } c <- total // send total to c } func main() { a := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(a[:len(a)/2], c) go sum(a[len(a)/2:], c) x, y := <-c, <-c // receive from c fmt.Println(x, y, x + y) }
  • channel默认是阻塞形式的,可以进行线程同步。
  • ch := make(chan type, value)构造channel时可通过设置不同的value来设定channl的buffer长度。
  • close用来关闭channel
  • 使用select+case来选择多个channel
  • 使用select + case <- time.After(5 * time.Second)来设定超时
  • Goexit 退出当前执行的goroutine,但是defer函数还会继续调用
  • Gosched 让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。
  • NumCPU 返回 CPU 核数量
  • NumGoroutine 返回正在执⾏行和排队的任务总数
  • GOMAXPROCS 用来设置可以运行的CPU核数

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏noteless

[四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式

前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明

19520
来自专栏大前端_Web

javascript高级程序设计(4-5)章笔记

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

11040
来自专栏我的技术专栏

Java锁机制(一)synchronized

18940
来自专栏cs

python数据类型

python编译图 运行python文件的时候,python会通过编译器将它编译成.pyc文件。 如果没有修改python文件,每次执行程序时,就执行前面运行...

31750
来自专栏Create Sun

python 3.x 爬虫基础---正则表达式(案例:爬取猫眼信息,写入txt,csv,下载图片)

  正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。...

58340
来自专栏乐百川的学习频道

Python 正则表达式

最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。 模式...

248100
来自专栏一“技”之长

Swift专题讲解十八——异常处理 原

        代码的运行很多时候并不会完全按照程序员的设想进行,编写代码时进行可控的异常处理机制是十分必要的。通常,对于一个特定的操作,程序员可以定义一个继承...

8320
来自专栏用户2442861的专栏

static在C和C++中的用法和区别

http://blog.csdn.net/skyereeee/article/details/8000512

32610
来自专栏Golang语言社区

转--Golang语言语法汇总

最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考 数据类型 ---- var varName type,var var1,var2… type,...

364160
来自专栏数据结构与算法

BZOJ3585: mex(主席树)

Description   有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。 Input   第一行n,m...

43290

扫码关注云+社区

领取腾讯云代金券