Go语言基础-基础语法 | 青训营笔记

94 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

入门

  1. slice可以声明后直接使用,map需要make分配内存
  2. if的判断条件,if v := x["two"]; v == "" {}
  3. string 类型的值是只读的二进制 byte slice,不能使用索引修改,但可以转为byte数组后修改
  4. range迭代map是无序的
  5. for循环
    • for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量
  6. 引用类型包含切片(slice)、字典(map)、通道(channel)、接口(interface)
  7. 要复制一个Slice,最好使用Copy函数

案例:猜数字游戏

示例代码

package main  
  
import (  
   "fmt"  
   "math/rand"   "time")  
  
func main() {  
   maxNum := 100  
   rand.Seed(time.Now().UnixNano())  
   secretNumber := rand.Intn(maxNum)  
   // fmt.Println("The secret number is ", secretNumber)  
  
   fmt.Println("Please input your guess")  
   // reader := bufio.NewReader(os.Stdin)  
   for {  
      var input int  
      _, err := fmt.Scanf("%d", &input)  
      if err != nil {  
         fmt.Println("An error occured while reading input. Please try again", err)  
         continue  
      }  
      if err != nil {  
         fmt.Println("Invalid input. Please enter an integer value")  
         continue  
      }  
      fmt.Println("You guess is", input)  
      if input > secretNumber {  
         fmt.Println("Your guess is bigger than the secret number. Please try again")  
      } else if input < secretNumber {  
         fmt.Println("Your guess is smaller than the secret number. Please try again")  
      } else {  
         fmt.Println("Correct, you Legend!")  
         break  
      }  
   }  
}

Go中的两种输入cli方法

1. fmt

1. fmt.Scanf
2. fmt.Scanln
3. fmt.Scan

scanf:按照给定的格式依次读取数据(包括非法数据),不能换行输入(如果要换行需要在前面加一个scanln吸收掉回车符,就像c语言中的getchar) scan:比scanf高级,依次读取数据,遇到回车会忽略,可以换行输入(如果要先用了scan输入,再用scanf输入的话,需要在中间加一个scanln) scanln:类似scan,但是遇到换行(回车)立马结束输入,如果要换行输入必须用多个scanln

2. bufio

首先使用bufio.NewReader创建reader对象 `reader := bufio.NewReader(os.Stdin)

1. ReadBytes n, err := reader.ReadBytes('\n') 2. ReadString line, err := reader.ReadString('\n')` 两个函数均会读如包含delim符号,是bufio读取输入时的常用函数