go语言入门指南之基础语法 | 青训营
“Go是一个开源的编程语言,它很容易用于构建简单、可靠和高效的软件。”这是Go语言官方网站对自身的表述。
Hello World
几乎所有的编程语言第一份demo都是打印"Hello World!"
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
和C语言相似,go语言的基本组成包括包声明、引入包、函数、变量、语句/表达式、注释等。
变量
定义变量。声明变量的一般形式是使用var 关键字,具体格式为:var identifier typename。如下的代码中定义了一个类型为int的变量。
这里与别的语言还是有很大区别的。
package main
import "fmt"
func main() {
var a int = 27
fmt.Println(a)
}
if判断
if 语句后可以使用可选的else语句, else语句中的表达式在布尔表达式为 false 时执行。
if语句不需要放在括号里面,表达式直接跟在if后面即可。
package main
import (
"fmt"
)
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
for循环
for循环是一个循环控制结构,可以执行指定次数的循环。
以下代码是写出100以内的素数的实例。
package main
import "fmt"
func main() {
var i, j int
for i = 2; i < 100; i++ {
for j = 2; j <= (i / j); j++ {
if i%j == 0 {
break
}
}
if j > (i / j) {
fmt.Printf("%d 是素数\n", i)
}
}
}
switch语句
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。Golang switch 分支表达式可以是任意类型,不限于常量。与其他语言的区别在于他不需要break退出,默认就会自动退出。
以下代码是判断分数所处的等级,用switch语句判断的实例。
package main
import "fmt"
func main() {
var grade string = "B"
var marks int = 90
switch marks {
case 90:
grade = "A"
case 80:
grade = "B"
case 50, 60, 70:
grade = "C"
default:
grade = "D"
}
switch {
case grade == "A":
fmt.Printf("优秀!\n")
case grade == "B", grade == "C":
fmt.Printf("良好\n")
case grade == "D":
fmt.Printf("及格\n")
case grade == "F":
fmt.Printf("不及格\n")
default:
fmt.Printf("差\n")
}
fmt.Printf("你的等级是 %s\n", grade)
}
基础语法-函数
函数声明包含一个函数名,参数列表,返回值列表和函数体。如果函数没有返回值,则返回列表可以省略。函数从第一条语句开始执行,直到执行return语句或者执行函数的最后一条语句;函数可以没有参数或接受多个参数;类型在变量名之后;函数可以返回任意数量的返回值;当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略;使用关键字func定义函数,左大括号依旧不能另起一行。
package main
import "fmt"
func test(fn func() int) int {
return fn()
}
type FormatFunc func(s string, x, y int) string
func format(fn FormatFunc, s string, x, y int) string {
return fn(s, x, y)
}
func main() {
s1 := test(func() int { return 100 })
s2 := format(func(s string, x, y int) string {
return fmt.Sprintf(s, x, y)
}, "%d, %d", 10, 20)
println(s1, s2)
}