GO基础| 青训营笔记

100 阅读3分钟

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

GO语言入门

配环境

配环境可以参考这两篇文章,另外在配环境的是时候,不要纠结,就按照教程一步步来。

[1](Go语言开发环境的搭建(Goland和VSCode) - 掘金 (juejin.cn))

[2](Windows系统下,15min从零开始在VSCode搭建Go语言所需环境|青训营笔记 - 掘金 (juejin.cn))

语言篇入门

基础变量

第一种,指定变量类型,如果没有初始化,则变量默认为零值

var v_name v_type
v_name = value

第二种,根据值自行判定变量类型。

var v_name = value

第三种,如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误,格式:

v_name := value

条件语句

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough

循环语句

for init; condition; post { }// init 和 post可以省略,类似while()
省略情况:
for sum <= 10{  
      sum += sum  
   }  
   fmt.Println(sum)

函数

func function_name( [parameter list] ) [return_types] {
   函数体
}

eg:
func max(num1, num2 intint {  
   /* 声明局部变量 */  
   var result int  
  
   if (num1 > num2) {  
      result = num1  
   } else {  
      result = num2  
   }  
   return result  
}

结构体方法,类似类的成员函数

/* 定义结构体 */  
type Circle struct {  
  radius float64  
}
//该 method 属于 Circle 类型对象中的方法  
func (c Circle) getArea() float64 {  
  //c.radius 即为 Circle 类型对象中的属性  
  return 3.14 * c.radius * c.radius  
}

数组

以下演示了数组初始化:

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

我们也可以通过字面量在声明数组的同时快速初始化数组:

balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

切片

定义切片

你可以声明一个未指定大小的数组来定义切片:

var identifier []type

切片不需要说明长度。

或使用 make()  函数来创建切片:

var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)

也可以指定容量,其中 capacity 为可选参数。

make([]T, length, capacity)

类似动态数组,可以利用append 来追加,但是扩容机制和vector类似,需要扩容拷贝

map

底层是hash实现

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type

/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

range

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}

以上代码中的 key 和 value 是可以省略。

如果只想读取 key,格式如下:

for key := range oldMap

或者这样:

for key, _ := range oldMap

如果只想读取 value,格式如下:

for _, value := range oldMap

json

type Student struct { 

Name string `json:"name"` 
Sid string `json:"sid"` //`json:"xxx"`结构体成员Tag

}

s := Student{Name: "jonh" ,Sid: "10323"}
//序列化 
a ,err := json.Marshal(s)
//反序列化 
err = json.Unmarshal(a,&s)



数字和字符串处理

strconv 包

时间处理

time 包

错误处理

errors 包

应用入门

网页翻译

curl请求直接转为go的请求代码

JSON转Golang Struct

上面两个工具节省很多时间‘

第一步抓取curl请求 eg

image.png

上面用f12 抓取 网页的请求curl,然后利用上面的工具生成代码。

第二步,当我们运行生成的代码,就代表,我们发送curl给翻译网站后台,后台程序返回结果给我们,这个结构是json ,再利用上面工具,把转成 GO struct ,最后选取想要的内容去获取,利用遍历等方法。

socks5 代理实现

[详细可以参考这个](【万字总结】Go语言上手(一) | 青训营笔记 - 掘金 (juejin.cn))

上面的代码都使用了 defer 和 go并发机制,这里先不写。