这是我参加青训营的第一天
一、环境安装
- 安装Go语言 The Go Programming Language
- 安装Goland JetBrains GoLand:不只是 Go IDE
- 配置go环境变量
二、运行hello world
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
三、Go语法
变量
- 变量声明
var a int
var x = 123
var b,c int = 2,3
var a string = " go"
另一种声明方式
a := 1 go语言会自动进行类型推断
- 常量
const a, b, c = 1, false, "str" //多重赋值
const (
a = 0
b = 1
c = 2
)
条件语句
- 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" )
}
- 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) (string, string) {
return y, x
}
数组
- 数组定义及赋值
a := [5]int{1, 2, 3, 4, 5}
- 数组传入函数
可以设置数组长度也可以不设置数组长度
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.翻译
- 获取浏览器开发者工具中的请求信息
- 将参数序列化后加入请求参数中
- 生成go代码 Convert curl to Go (curlconverter.com)
- 将响应信息转换为Go语言Json对象 JSON转Golang Struct - 在线工具 - OKTools
- 将响应信息反序列化
3.socks5代理
没太弄懂。。。
五、总结
第一天学习go语言 虽然有其他语言基础 但是感觉老师讲的有点快 课后又花了挺久的时间回顾 继续加油吧