Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
基础语法及go特有语法测试:
// 注释
/*
注释
*/
// 包名
package main
// 引用包
import "fmt"
// 全局变量
var globalString = "全局变量"
// 函数
func main() {
var helloString = "Hello, World!"
fmt.Println(helloString)
println("全局变量:",globalString)
// 无值,取默认变量声明
var a int8
fmt.Println("变量a:", a)
var b ,c int8 = 12,1
fmt.Println("变量b:", b)
fmt.Println("变量c:", c)
fmt.Println("变量b+c:", b+c)
var d=true
fmt.Println("boolean",d)
f:=10
fmt.Println("省略var:",f)
helloString,a,b,c="helloGo",1,2,3
// 多变量一起赋值
// 省略var->编译器自动推断
// 变量声明 自动判定类型
// 多个变量声明 b=12 c=1
fmt.Println(helloString, a,b,c)
// 判断语句
if c== 3{
println("数据c的值是3")
}else{
println("数据c的值不是3")
}
/*
go 特有的select 语法
每个 case 都必须是一个通信
所有 channel 表达式都会被求值
所有被发送的表达式都会被求值
如果任意某个通信可以进行,它就执行,其他被忽略。
如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。
否则:
如果有 default 子句,则执行该语句。
如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。
*/
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 = <-c1:
println("received", i1, " from c1\n")
case c2 <- i2:
println("sent", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
println("received", i3, " from c3\n")
} else {
println("c3 is closed\n")
}
default:
println("no communication\n")
}
paramA := "参数A"
paramB := 10
println("返回:",function_name(paramA,paramB))
println("运行后参数:",paramA,paramB)
}
func function_name(a string,b int) int {
println("参数:",a,b)
a="改变A"
b=12
println("全局变量:",globalString)
return 1
}
结果:
GOROOT=C:\Go #gosetup
GOPATH=C:\Go\bin #gosetup
C:\Go\bin\go.exe build -i -o C:\Users\TWH-PC\AppData\Local\Temp\___go_build_HelloWorld_go.exe D:\GO_WorkSpaces\HelloWorld.go #gosetup
C:\Users\TWH-PC\AppData\Local\Temp\___go_build_HelloWorld_go.exe #gosetup
Hello, World!
变量a: 0
变量b: 12
变量c: 1
变量b+c: 13
boolean true
省略var: 10
helloGo 1 2 3
全局变量: 全局变量
数据c的值是3
no communication
参数: 参数A 10
全局变量: 全局变量
返回: 1
运行后参数: 参数A 10
Process finished with exit code 0