大佬教程收集整理的这篇文章主要介绍了Go语言语法汇总,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考
var varName type
,var var1,var2… type
,var varName type = Value
,var varName1,varName2 type = Value1,Value2
,var varName1,varName2=Value1,Value2
,varName1,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
保存的是引用而非实体
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,x); }
for
语句类似C语言,但是break
和continue
可以跟标号,跳出多重循环。
switch
语句不用break
,如果想强行执行下面的case可以使用fallthrough
声明方式:
func funcName(input1 type1,input2 type2) (output1 type1,output2 type2)
函数可以有多个返回值
函数的值操作和指针操作类似C语言,内置类型中的string
,slice
,map
直接使用的是类似的指针传递,不用使用取地址符,但是,如果需要改变slice
的长度,则需要取地址穿指针。
defer
语句用来表示在函数返回前执行的语句。
type typeName func(input1 inputType1,input2 inputType2 [,...]) (result1 resultType1 [,...])
用来声明一个函数类型,主要用于高阶函数中。
import
用来导入包,package
用来导出包,包操作使用.
操作符
声明方式:
type Person struct { name string age int }
匿名方式,匿名方式下A含有B的所有类型
type Student struct { Person // 默认Person的所有字段 speciality string }
如果匿名类型中有字段和本身有冲突,可以使用匿名类型+.
访问
类型的方法声明:
func (r ReceiverType) funcName(parameters) (results)
需要改变struct内部的值时,需要将ReceiverType
定义为*
指针类型,但是调用的时候不需要,go语言自动帮你完成了。
方法可以继承,可以重载
type InterfaceName interface
用来定义inerface
空interface(interface{})不包含任何的method,正因为如此,所有的类型都实现了空interface
一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值
value,ok = element.(T)
,这里value
就是变量的值,ok
是一个bool
类型,element
是interface
变量,T是断言的类型,如果ok
为true
则表示,element
确实是T
类型的。
interface
可以嵌套
使用go
关键字+函数名
实现并发
使用channel
实现线程间通讯,channel
通过make
构造,使用<-
来发送和接受数据。
chan
是channel
的关键字,后面跟数据类型ch <- v
发送数据,v:=<-ch
接收数据,ch
是chan
类型。
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)
来设定超时
Gosched
让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。
NumGoroutine
返回正在执⾏行和排队的任务总数
GOMAXPROCS
用来设置可以运行的cpu核数
以上是大佬教程为你收集整理的Go语言语法汇总全部内容,希望文章能够帮你解决Go语言语法汇总所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。