学一下go语言,入门还是比较简单的。
基础语法
首先是一些基础知识,如变量定义、赋值之类的东西
1 | package main |
如果声明了变量没有调用,它会报错,也就是说上面的代码是跑不起来的。
通道与select语句
go语言的channel大部分人都将它看作管道(某种意义上来说确实很像管道),它的操作符是<-
,是这样定义的:
1 | var c3 chan float32 //接收或发送float32类型的数据 |
但大伙都习惯这样写:
1 | c3 := make(chan int)//无缓冲区,可以想象成一根很短的管道,传进一个数据就塞满了,造成程序阻塞 |
go语言的条件语句相比其他语言也多了一条,select
语句
直接看菜鸟教程的用例吧
1 | package main |
请求响应
OK加点速,直接开始请求响应吧
1 | package main |
单引号双引号和反引号的区别
单引号在go语言中表示golang中的rune(int32)类型,单引号里面是单个字符,对应的值为该字符的ASCII值。
双引号是表示字符或字符串,里面可以有转义字符,如\r \n
等
反引号是表示其原生的意思,在单引号中的内容可以是多行内容,不支持转义
发送http请求
http.Post请求需要三个参数,第一个是请求的URL,为string类型;第二个是请求的content-type,为string类型;第三个是请求体内容,为io.Reader类型(所以使用了strings.NewReader);返回两个参数,一个是响应内容,为*Response类型;一个是错误信息,为error类型
response的内容如下:
response其实是一个结构体,下面是他返回的内容和类型
1 | Package: |
strings.NewReader
作用为:初始化一个 Strings.Reader,传入需要操作的字符串,初始化当前读取位置 i=0,prevRune=-1,经过该函数,可以看到返回的类型为结构体,里面包含字符串、字符大小(需要用.size()
,用.len()
返回为0)和prevRune(prevRune: 保存上一个Rune的位置,默认是-1,只有在调用 ReadRune 方法的时候才会增加),想了解详情的可以看掘金的这篇文章Go语言 strings.Reader 源码详解
1 | type Reader struct { |
Protocol Buffer
如果看到.pb.go文件,则必定存在.proto文件。
go安全相关
go语言其实相对来说是比较安全的,大部分问题集中在写法问题,例如,SQL注入的写法,直接拼接和使用?作为预编译写法。
常见的安全问题在:
https://github.com/Tencent/secguide/blob/main/Go安全指南.md
- 本文作者: Sn1pEr
- 本文链接: https://sn1per-ssd.github.io/2022/11/30/go语言学习笔记/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!