基础语法
1.格式
package main
import "fmt"
func main(){
fmt.Println("hello go")
}
2.变量声明
变量使用var声明,常量使用const声明(无确定类型,根据上下文自动确定类型)。变量的类型在变量名的后面
3.循环
go只有for循环,在switch语句(可使用任意的变量类型,case后可添加判断语句)中,不用写break跳出分支,进入分支后自动跳出
4.Printf输出
%v可以输出任意类型的变量,%+v输出详细信息,%#v输出更详细的信息
package main
import "fmt"
type point struct {
x, y int
}
func main(){
p := point{1, 2}
fmt.Printf("p = %v\n", p) // p = {1 2}
fmt.Printf("p = %+v\n", p) // p = {x:1 y:2}
fmt.Printf("p = %#v\n", p) // p = main.point{x:1, y:2}
}
实例
实例一:猜数器
range 是个迭代器,当被调用的时候,从它循环的内容中返回一个键值对。基于不同的内容,range 返回不同的东西。生成这个随机数,为了生成随机数,我们需要用到 math/rand 包。我们的第一个版本的代码是这样子的,我们先导入 fmt 包和 math/rand 包,定义一个变量, maxNum 是100。下面用 rand.Intn() 来生成一个随机数,再打印出这个随机数。
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
然后接下来我们需要实现用户输入输出,并解析成数字。
每个程序执行的时候都会打开几个文件,stdin stdout stderr等,stdin 文件可以用 os.Stdin 来得到。
然后直接操作这个文件很不方便,我们会用 bufio.NewReader 把一个文件转换成一个 reader 变量。
reader 变量上会有很多用来操作一个流的操作,我们可以用它的 ReadString 方法来读取一行。
如果失败了的话,我们会打印错误并能退出。ReadString 返回的结果包含结尾的回车符和换行符,我们把它去掉,再用strconv.Atoi()转换成数字。如果转换失败,我们同样打印错误,退出。
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading inputs.Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\r\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guess is:",guess)
if guess > secretNumber {
fmt.Println("你的猜测大于正确数字,请再次尝试")
}else if guess < secretNumber {
fmt.Println("你的猜测小于正确数字,请再次尝试")
}else {
fmt.Println("猜测正确")
break
}
}
}