fengchun_yuan 2 years ago
parent
commit
24dcbd603e
2 changed files with 149 additions and 0 deletions
  1. 110 0
      Go语言101/入门.md
  2. 39 0
      note/cngx用户认证模块.md

+ 110 - 0
Go语言101/入门.md

@@ -433,4 +433,114 @@ Go语言有两种变量声明形式。一种称为标准形式,另一种称为
 ```
 
 ### 每个局部声明的变量至少要被有效使用一次
+
+局部变量被声明后至少要被有效使用一次,否则编译器将报错。包级变量无此限制。
+
+可以参考下图
+
+`_, _ = r, s // 将r和s做为源值使用一次。`
+
+### 值的可寻址性
+
+所有变量都是可以寻址的,所有常量都是不可被寻址的。
+
+## 变量和常量的作用域
+
+```golang
+1| package main
+2|
+3| const y = 70
+4| var x int = 123 // 包级变量
+5|
+6| func main() {
+7| // 此x变量遮挡了包级变量x。
+8| var x = true
+9|
+10| // 一个内嵌代码块。
+11| {
+12| x, y := x, y-10 // 这里,左边的x和y均为新声明
+13| // 的变量。右边的x为外层声明的
+14| // bool变量。右边的y为包级变量。
+15|
+16| // 在此内层代码块中,从此开始,
+17| // 刚声明的x和y将遮挡外层声明x和y。
+18|
+19| x, z := !x, y/10 // z是一个新声明的变量。
+20| // x和y是上一句中声明的变量。
+21| println(x, y, z) // false 60 6
+22| }
+23| println(x) // true
+24| println(y) // 70 (包级变量y从未修改)
+25| /*
+26| println(z) // error: z未定义。
+27| // z的作用域仅限于上面的最内层代码块。
+28| */
+29| }
+```
+
+# 运算符
+
+## op=运算符
+
+对于一个二元算数运算符op,语句x = x op y可以被简写为x op= y。 在这个 简写的语句中,x只会被估值一次。
+
+就是 += 的描述
+
+## 字符串衔接运算符
+
+被+的两个操作数,必须为同一类型的字符串值
+
++=运算符也适用
+
+# 函数的声明和调用
+
+### 函数声明
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 

+ 39 - 0
note/cngx用户认证模块.md

@@ -0,0 +1,39 @@
+# cngx用户认证代码理解
+
+着重看`common_util.readRequestArgs`方法
+
+然后先`ngx.req.read_body()`用于后面的读body
+
+`ngx.req.get_uri_args()`用于读get参数,以key\value的形式,即table类型
+
+urlArgs 添加字段 `__startDealTime` 当前处理时间
+
+`local reqHeaders = ngx.req.get_headers(0) or {}` 把headers中的key\value放到reqHeaders 中
+
+`common_util.get_data()` 中内嵌 `ngx.req.get_body_data()` 方法,获取的是bodyStr
+
+用`ngx.var.uri`获取path
+
+`if not flag ` 这个逻辑没看懂,之后再细看下
+
+`reqBody = cjson_safe.decode(reqBodyStr)` 继续body字符串,这种解析安卓端会nil,如果nil,用`reqBody = ngx.decode_args(reqBodyStr) or {}`进行解析
+如果解析失败,打印错误日志,拒绝请求
+
+再拿一下urlPath,和`/appc/xxxx`进行匹配,这个是socket请求,如果匹配到,就拿`appc_util.transferCore`方法从`api_content`、`reqBody`、`urlArgs`中筛选各个参数,放到reqBody中
+
+然后进入middlewareCheck.check方法
+
+## validateToken
+
+`path = string.gsub( path, "/v4/", "/")`把/v4/换成/
+
+如果path来自于`/ccb/ccbCallback` 且args或者body中有callback参数,置为nil,并且通过该层校验
+
+如果headers中参数from字段 == "cc",通过该层校验
+
+然后获取userID、version、platform
+
+
+
+
+