Go语言基础 | 青训营笔记

454 阅读1分钟

这是我参加青训营的第一天

一、环境安装

  1. 安装Go语言 The Go Programming Language
  2. 安装Goland JetBrains GoLand:不只是 Go IDE
  3. 配置go环境变量

image.png

二、运行hello world

package main

import "fmt"

func main() {
   fmt.Println("hello world")
}

三、Go语法

变量

  1. 变量声明
var a int
var x = 123
var b,c int = 2,3
var a string = " go"

另一种声明方式 a := 1 go语言会自动进行类型推断

  1. 常量
const a, b, c = 1false"str" //多重赋值
const (
    a = 0
    b = 1
    c = 2
)

条件语句

  1. if 语句

与c++的区别条件语句没有()

   var a int = 10  
   if a < 10 {  
       fmt.Printf("a 小于 10\n" )  
   }else if a < 20{
       fmt.Printf("a 小于 20\n" ) 
   }else {
       fmt.Printf("a 大于等于20\n" )
   }
  1. switch 语句

与c++的区别满足其中一个条件即退出不需要break语句 功能更强大

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

循环语句

  • go语言只有for循环语句 没有 do while 也没有while do
  • for循环与if类似条件没有()
  • For-each range 循环可以对字符串、数组、切片等进行迭代输出元素 以两个元素遍历第一个元素为index第二个元素为 当第一个元素不需要时可以定义为_
   sum := 1  
   for ; sum <= 10; {  
      sum += sum  
   }
   strings := []string{"kat""gs"}  
   for i, s := range strings {  
      fmt.Println(i, s)  
   }

函数

func 函数名(参数列表)(返回值类型)

特点:函数值可以返回多个变量 无返回值时不设置返回值列表就可以

func swap(x, y string) (stringstring) {  
   return y, x  
}

数组

  1. 数组定义及赋值
a := [5]int{1, 2, 3, 4, 5}
  1. 数组传入函数

可以设置数组长度也可以不设置数组长度

func getAverage(arr []int, size int) float32  
{  
   var i int  
   var avg, sum float32    
  
   for i = 0; i < size; ++i {  
      sum += arr[i]  
   }  
  
   avg = sum / size  
  
   return avg;  
}

结构体

与其他语言类似

type Books struct {  
   title string  
   author string  
   subject string  
   book_id int  
}

序列化与反序列化

type DictRequest struct {
   From string `json:"from"`
   To   string `json:"to"`
   Text string `json:"text"`
}

request := DictRequest{From: "auto", To: "zh-CHS", Text: "good"}
buf, err := json.Marshal(request)

var dictResponse DictResponse
err = json.Unmarshal(bodyText, &dictResponse)
if err != nil {
   log.Fatal(err)
}
fmt.Printf("%#v\n", dictResponse)

四、录播教学项目

1.猜谜游戏

代码略

在获取随机数时需要设置随机种子 这一点和c++类似 常用是以当前时间戳为随机种子 否则每次程序运行结果相同

maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)

需要注意的是教学老师所用机器为mac回车为\n windows系统为\r\n 在去除回车时需要去除\r\n

tips:游戏的小技巧是二分

作业 :讲注释部分换为未注释部分即可

var guess int
fmt.Scanf("%d\n", &guess)
//if err != nil {
// fmt.Println("An error occured while reading input. Please try again", err)
// continue
//}
//input = strings.Trim(input, "\r\n")
//
//guess, err := strconv.Atoi(input)
//if err != nil {
// fmt.Println("Invalid input. Please enter an integer value")
// continue
//}

2.翻译

  1. 获取浏览器开发者工具中的请求信息

image.png

  1. 将参数序列化后加入请求参数中
  2. 生成go代码 Convert curl to Go (curlconverter.com)
  3. 将响应信息转换为Go语言Json对象 JSON转Golang Struct - 在线工具 - OKTools
  4. 将响应信息反序列化

3.socks5代理

没太弄懂。。。

五、总结

第一天学习go语言 虽然有其他语言基础 但是感觉老师讲的有点快 课后又花了挺久的时间回顾 继续加油吧