#生成二进制文件的形式 go build 1.go #得到1 #直接运行源文件的形式 go run 1.go
二、Go的基本语法
1、注释
其实和c语言的一模一样,看下代码就知道了:
1 2
//单行注释 /*整体注释*/
2、字符串连接
和python的一样,直接+即可
1 2 3 4 5
package main import"fmt" funcmain() { fmt.Println("Google" + "Runoob") }
3、关键字
下面列举了 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 语言还有 36 个预定义标识符:
append bool byte cap close complex complex64 complex128 uint16 copy false float32 float64 imag int int8 int16 uint32 int32 int64 iota len make new nil panic uint64 print println real recover string true uint uint8 uintptr 程序一般由关键字、常量、变量、运算符、类型和函数组成。
程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
程序中可能会使用到这些标点符号:.、,、;、: 和 …。
4、数据类型
有int、bool、字符串型、float和指针等
1 2 3 4 5 6 7 8 9
package main import"fmt"
funcmain() { var a int= 1.5 var b int = 2 var c string = "victor" fmt.Println(a,b,c) }
package main import"fmt" var f = "king" funcmain() { var a float64= 1.5 const LENGTH int = 10 const hg = iota var b,c,d =2,3,"victor" e:=8 fmt.Println(a,b,c,d,e,LENGTH,hg) }
package main import"fmt" var f = "king" funcmain() { var a float64= 1.5 const LENGTH int = 10 const hg = iota var b,c,d =2,3,"victor" e:=8 fmt.Println(a,b,c,d,e,LENGTH,hg)
aa:=10 bb:=30 cc:=(aa+bb/2*100-200)%75 cc^=0x76 fmt.Printf("this is %d\n",cc) if cc>=10 { fmt.Printf("good!") }elseif cc<2 { fmt.Printf("no!!!") }else{ fmt.Printf("heihei") }
var c2, c3 chanint var i1, i2 int c1 := make(chanint,10) i1=10 select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") }
i:=0 for i<10 { //传说中的while循环 i++ fmt.Printf("number %d\n",i) } str:=[]string{"google","baidu"} for _,v := range str{//_表示不需要的值 fmt.Println(v) } lll:=0 forrange str{ //所谓的单纯循环 fmt.Println(str[lll]) lll++ } for i := range [100]int{}{ //按数量循环 fmt.Println(i) } mymap:=map[string]string{"a":"king","b":"victor","c":"yee"} for k,v:= range mymap{ //键值对,针对map而言,map其实就是python中的字典概念 fmt.Printf("key-->%s and value-->%s\n",k,v) } delete(mymap,"a")//删除的意思 for k,v:= range mymap{ fmt.Printf("key-->%s and value-->%s\n",k,v) }
var f = "king" type myfunc func(int)int //函数名作为参数的声明和定义 type register struct{ rax int rbx int } funcmain() { val,stringss:=max(8,108,"king") fmt.Println(val,stringss) vv:=testcallback(10,callback)//函数名作为参数 fmt.Printf("FuncCallBack-->%d\n",vv) var reg register changevalue(®,30)//普通结构体的写法,指针 fmt.Printf("rax-->%d and rbx-->%d\n",reg.rax,reg.rbx) reg.changevalue2(70)//类似面向对象的写法,指针 fmt.Printf("rax-->%d and rbx-->%d\n",reg.rax,reg.rbx) bv:=bibao() //闭包的写法,可以直接使用函数里面的变量 fmt.Println(bv()) fmt.Println(bv()) }
funcmax(a,b int,str string)(int,string){ var result int if a>b{ result=a }else{ result=b } fmt.Println(str) return result,str } functestcallback(x int, f myfunc)int{ return f(x) } funccallback(x int)int { return x+7 } funcchangevalue(reg *register,aa int){ reg.rax=aa+1 reg.rbx=aa+2 }