go语言入门指南之基础语法 | 青训营

71 阅读2分钟

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)
}