关于我们 About us

关于我们 About Us

关于本站

本站域名【wang123.net】由汉语拼音 wang (网络之意) + 数字 123组成,域名后缀为 net,现在则作为个人技术博客使用。

本站域名于2013年02月注册成功, 2016年12月域名备案通过。

以前一直作为个人博客域名,前期使用 PHP CodeIgniter 框架开发,2018年改成PHP Laravel 框架开发。

现在(2021年),本站改成使用 Go + MySQL开发。

本站所用技术:Go、MySQL、Vue、HTML、CSS …

关于博主

本人具有近十年互联网网站系统开发经验。

前几年在北京西二旗、望京工作。

近几年在上海张江工作。

主要技能:

Java (Spring Boot)
PHP (Laravel、CodeIgniter、Yii)
MySQL
Golang (Gin、Echo、GORM)
Vuejs
Angular
Redis
HTML + CSSjQuery (JS库,近几年不使用了)
ThinkPHP (PHP框架,仅在维护部分公司项目用过)
CodeIgniter (PHP框架,近几年仅在维护项目)
Smarty (PHP模板,近几年不使用了)

隐私保护策略 Privacy Policy

欢迎使用本网站!我们非常重视用户的隐私保护,特此制定本隐私协议,以说明我们在收集、使用、存储和保护您个人信息时的做法。请在使用本网站前,仔细阅读本隐私协议。

一、信息收集

本网站为静态网站,不主动收集任何个人信息,包括但不限于姓名、联系方式、身份证号、地址等。您在浏览网站过程中,不会因访问行为产生任何数据被本网站记录和收集。

二、信息使用

由于本网站不收集用户个人信息,因此不存在任何个人信息使用行为。

三、信息共享与披露

本网站不会将任何个人信息共享、出售、出租或披露给任何第三方。即使未来因特殊情况需要进行信息共享,我们也会在共享前获得您明确的同意,并确保第三方遵守严格的隐私保护标准。

四、Cookies 使用

本网站不使用 Cookies 及其他类似技术收集用户信息。您的浏览行为不会因 Cookies 的存在而受到追踪或分析。

五、信息存储与安全

因为没有收集用户个人信息,所以不存在相关信息存储问题。同时,我们采取合理的技术和管理措施保障网站运行安全,防止因外部攻击导致不存在的用户信息泄露风险。

六、协议更新

我们可能会根据法律法规的变化或业务调整,适时修改本隐私协议。修改后的协议将在网站上公布,若您继续使用本网站,即视为您已充分知悉并同意修改后的协议内容。
如您对本隐私协议有任何疑问、意见或建议,可通过本站联系我们。感谢您对本网站的信任与支持!

在Debian11上安装Openresty服务(Nginx+Lua)

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 官方 APT 包仓库提供了 deb 包 (适用于 Ubuntu 和 Debian),可以很方便的安装,一起来看下具体的安装步骤吧。

Debian 更新系统

1
2
3
$ apt update
# 这一步选做
$ apt upgrade

添加 openresty 仓库

可以在 Debian 系统中添加 openresty 仓库,这样就可以方便的安装或更新我们的软件包(通过 apt update 命令)。
运行下面的命令就可以添加我们的仓库(每个系统只需要运行一次):

步骤一:安装导入 GPG 公钥时所需的几个依赖包(整个安装过程完成后可以随时删除它们):

1
sudo apt -y install --no-install-recommends wget gnupg ca-certificates

步骤二:导入我们的 GPG 密钥:

1
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

步骤三:添加我们官方 APT 仓库。

对于 x86_64 或 amd64 系统,可以使用下面的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`

echo $codename

echo "deb http://openresty.org/package/debian $codename openresty" \
| sudo tee /etc/apt/sources.list.d/openresty.list
```

这历史查找当前 debian 系统的版本(即 $codename 变量),更加系统版本再配置。


```bash
root@VM-4-14-debian:/opt# codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`
root@VM-4-14-debian:/opt# echo $codename
root@VM-4-14-debian:/opt# bullseye
root@VM-4-14-debian:/opt# echo "deb http://openresty.org/package/debian bullseye openresty" | sudo tee /etc/apt/sources.list.d/openresty.list
deb http://openresty.org/package/debian bullseye openresty

而对于 arm64 或 aarch64 系统,则可以使用下面的命令:

1
2
3
4
codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`

echo "deb http://openresty.org/package/arm64/debian $codename openresty" \
| sudo tee /etc/apt/sources.list.d/openresty.list

更新APT索引并安装

步骤四:更新 APT 索引:

1
sudo apt update

然后就可以像下面这样安装软件包,比如 openresty:

1
sudo apt -y install openresty

这个包同时也推荐安装 openresty-opm 和 openresty-restydoc 包,所以后面两个包会缺省安装上。

如果你不想自动关联安装,可以用下面方法关闭自动关联安装:

1
sudo apt -y install --no-install-recommends openresty

openresty-opm 是 OpenResty 的包管理工具(OpenResty package manager)。

查看安装的版本:

安装目录: /usr/local/openresty

1
2
3
4
5
$ nginx -v
nginx version: openresty/1.21.4.1

$ /usr/local/openresty/nginx/sbin/nginx -v
nginx version: openresty/1.21.4.1

使用 systemctl 可以管理openresty服务:

1
2
3
4
5
systemctl enable openresty 
systemctl status openresty
systemctl start openresty
systemctl stop openresty
systemctl restart openresty

验证效果,通过 curl 命令请求 localhost :

1
2
3
4
5
6
7
8
9
10
root@VM-4-14-debian:~# curl -I localhost
HTTP/1.1 200 OK
Server: openresty/1.21.4.1
Date: Sun, 09 Oct 2022 14:04:10 GMT
Content-Type: text/html
Content-Length: 1097
Last-Modified: Tue, 17 May 2022 03:51:45 GMT
Connection: keep-alive
ETag: "62831bd1-449"
Accept-Ranges: bytes

也可以打开浏览器 ,访问服务器ip,查看页面验证。

参考链接

https://openresty.org/cn/linux-packages.html

Go语言如何检查变量是否为空值?

Go语言如何检查变量是否为空值?

检查变量

Go语言中,当变量时没有显式初始化的,就会赋予零值或空值。

比如,int 默认初始值为0,string 的初始值为 空字符串,bool 的初始值为 false。

那么我们就可以通过判断这些值,来确定变量是否为空值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main

import (
"fmt"
)
// 变量变量时没有显式初始化的,会赋予零值。

func main() {

fmt.Println("----> check variable :")

// 数值型,直接检查0值
var i int
if i == 0 {
fmt.Println("---> i (int) 的值为0 : ", i)
}

// 字符串: 可以检查是否为空字符串,或者其长度
var s string
if s == "" {
fmt.Println("---> 字符串 s 的值为空 : ", s)
}
if len(s) == 0 {
fmt.Println("---> 字符串 s 的长度为0 : ", len(s))
}

// 布尔值
var b bool
if b == false {
fmt.Println("---> 布尔型 b 的值为: ", b)
}
}

数组

数组可以使用其长度来判断,是否为空数组。

1
2
3
4
5
6
7
8
9
10
// var a []int
var a []int
a = []int{1,2,3}
if len(a) == 0 {
fmt.Printf("---> 数组 len(a): %v\n", len(a))
}
if cap(a) == 0 {
fmt.Printf("---> 数组 cap(a): %v\n", cap(a))
}
fmt.Printf("---> 数组 len(a): %v cap(a): %v\n", len(a), cap(a))

map 类型

map 类型可以使用 nil 和 len() 判断:

1
2
3
4
5
6
7
8
// map
var m map[int]string
if m == nil {
fmt.Printf("---> map[int]string 检查nil: %v\n", m)
}
if len(m) == 0 {
fmt.Printf("---> map[int]string 检查长度: %v\n", m)
}

结构体

结构体可以通过其字段来判断。

1
2
3
4
5
6
7
8
9
10
// 结构体
type MyStruct struct {
Name string
}

var struct1 MyStruct
if struct1.Name == "" {
// ---> 结构体 struct1.Name 值为空: {}
fmt.Printf("---> 结构体 struct1.Name 值为空: %v\n", struct1)
}

使用反射 reflect

可以使用反射提供的方法检查。

1
2
3
4
5
6
7
8
9
10
// import 	"reflect"

func is_empty(data interface{}) {
v := reflect.ValueOf(data)
if !v.IsValid() { // 值不存在
return true;
}

return false;
}

参考链接

https://golangtutorial.dev/tips/check-for-empty-string/
https://www.geeksforgeeks.org/checking-if-structure-is-empty-or-not-in-golang/

问题:Ubuntu系统的默认shell比较字符串报错

问题:Ubuntu系统的默认shell比较字符串报错

系统版本如下:

从 /etc/issue 文件中查看系统版本:

1
2
$ cat /etc/issue
Ubuntu 20.04.4 LTS \n \l

问题复现

创建一个测试文件 test.sh ,其代码如下:

1
2
3
4
5
6
7
8
#!/bin/bash
if [ "$1" == "prod" ] ;then
echo "您输入是 prod ..."
elif [ "$1" == "dev" ] ;then
echo "您输入是 dev ..."
else
echo "您输入的我不认识!"
fi

使用 sh 命令执行会报错。

1
2
3
4
5
6
7
8
9
10
11
$ sh test.sh prod
test.sh: 4: [: prod: unexpected operator
test.sh: 6: [: prod: unexpected operator
您输入的我不认识!
````

使用 bash 命令执行正常。

```sh
$ bash test.sh prod
您输入是 prod ...

原因

Debian和Ubuntu 系统中,默认的 sh 命令指向的是 dash 命令,这个dash的语法和 bash 很不同。

1
2
$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 May 22 2020 /bin/sh -> dash

解决办法:

(1) 修改命令,将 Ubuntu 的 sh 的默认 dash 改成 bash。或者执行的时候指明是 bash 命令,不用 sh 命令。

(2) 修改代码,改成严格的 dash 代码。