这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
碎碎念:刚刚学习Go,所以可能有不完美的地方,请各位指正。
环境搭建
简明扼要了属于是,Download and install - The Go Programming Language
语言概述
一个可运行Go程序需要一下几个部分组成:
- 包声明
- 包导入
- 主函数
所以,最简单的go程序应该这个样子:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
其中,main函数必须要在main包下,且只能有一个main函数。
运行可以使用go run hello.go
运行,或使用go build hello.go
将其打包为二进制文件运行。
当你离开编辑器或IDE时,go通常会通过工具帮你格式化一下代码。代码风格全球统一,不可以自定义。
变量声明
var identifier int // 使用默认值
var identifier int = 233 // 声明且赋值
var identifier = 233 // 编译器判断类型
identifier := 233 // 声明且赋值
var identifier1, identifier2 int // 多变量声明
var identifier1, identifier2 = 1, 2 // 声明且赋值
... 常量不多说了 大同小异,使用const
关键字
流程控制
-
if
- 不需要将条件括起来,括起来格式化的时候也不会保留
if condition { something() } else { others() }
-
switch
- 省略condition时,var应该是
boolean
类型
- 自动break
switch condition { case val1: ... case val2: ... default: ... }
- 省略condition时,var应该是
-
forr
不同的可迭代对象有些许差异
for iORk, v := range iter { fmt.Println(iORk, v) }
-
fori
每个选项都可以省略
for init; condition; update { something() }
常用数据类型及其他
-
pointer
var ptr *int
声明变量可以在变量类型前加*,同时使用&取地址,很像C
-
struct
type s struct { Member type `json:me,ber` }
使用大写首字母字段声明的结构体可以使用
json.Marshal()
进行序列化或json.Unmarshal()
反序列化。 -
struct-func
type user struct { name string password string } func (u *user) checkPassword(password string) bool { return u.password == password }
like this,在方法名前加结构体指针
-
function
/* func methodName(param type) (returnValue type) { } */ func exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok }
go语言中函数支持多返回值
-
error
func findUser(users []user, name string) (v *user, err error) { for _, v := range users { if v.name == name { return &v, nil } } return nil, errors.New("not found") }
go语言中通过函数返回非空error来处理异常,无错误返回nil
-
map
m := make(map[keyType]valueType)
-
slice
s := make([]string, 3)
Demo
- 流程控制写一个猜数小游戏
- 通过struct解析json,获取命令行参数,调用API,发送网络请求
- 有点神奇的socks5代理服务器,发送socks5协议报文,建立连接
哦吼!我都推到Liumingxun/byte-go仓库了!欢迎Follow我!🥳