JAVA 方法
什么是方法?
Java方法就是所有语句的集合,他们在一起执行一个功能能.比如下方:
System.out.println()
系统类.标准输出对象.输出方法()
静态调用
1 | public static void one() { |
实例
1 | public class Demo { |
寻常方法
1 | public void two () { |
实例
1 | public class Demo { |

Java方法就是所有语句的集合,他们在一起执行一个功能能.比如下方:
系统类.标准输出对象.输出方法()
1 | public static void one() { |
实例
1 | public class Demo { |
1 | public void two () { |
实例
1 | public class Demo { |
| ID | DE |
|---|---|
| \w | 匹配字母\数字\下划线 |
| \W | 匹配非字母\数字\下划线 |
| \s | 匹配任意空白字符 |
| \S | 匹配任意非空白字符 |
| \d | 匹配任意数字 |
| \D | 匹配非数字的字符 |
| \A | 匹配字符串开头 |
| \Z | 匹配字符串结尾(只匹配换行前的结束字符串) |
| \z | 匹配字符串结尾(同时还会匹配换行符) |
| \G | 匹配最后匹配完成的位置 |
| \n | 匹配任意一个换行符 |
| \t | 匹配一个制表符 |
| ^ | 匹配一行字符串开头 |
| $ | 匹配字符串结尾 |
| . | 匹配任意换行符 |
| [^…] | 不存在的**[]字符(如[^abc],匹配除了a\b\c**的字符) |
| * | 匹配0个或多个表达式 |
| + | 匹配0或1个前面的正则表达式定义的片段 |
| ? | 匹配0个或1个前面正则表达式定义的片段 |
| () | 匹配括号内的表达式,一般表达一个组 |
| {n} | 精确匹配n前面的表达式*,比如\d{n},(n代表n个数字) |
| {n,m} | 匹配n到m次前面正则表达式的定义片段 |
对象主要分为状态 和行为,例如,一个老年人他是一个对象,他的状态有:“发型颜色”,行为是喜欢打“???”号,这就是对象
1 | public class Demo { |
输出结果为: 老人的年龄是28
类是一个木板,他将描述类对象和行为状态.
1 | public class Dome{ |
1 | public Dome{ |
1 | public Body{ |
变量声明和初始化都在方法之中,方法结束收变量就会自动销毁
定义在类中,这种变量在创建的时候会被实例化.成员变量可以被类中的方法\构造方法和特定的类语句块访问
类变量声明在类中,必须声明为static类型
1 | public class Demo { |
1 | class 父类{ |
JAVA 继承是面向对象编程中的一个重要的知识点,在以后开发的过程之中也将非常常用,假如Father是父类,Son是子类,那么可以这样构造:
1 | class Father { |
1 | class A { |
实例
1 | class A { |
1 | public class Demo { |
1 | public class test extends Thread { |
通过在 Microsoft Store 中搜索 WSL 并下载 Debian 版本后,我们可以通过使用 cat /etc/os-release 来查看当前版本信息。
主要是 VERSION_CODENAME 这一行,获取到之后我们可以通过 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 来添加国内镜像的使用:
1 | 本文只是通过 ```cat /etc/os-release``` 来获取当前 debian 系统信息,读者环境可能不同,一切以你所执行他所输出的信息为准。 |
之后,我们先通过 nano /etc/apt/sources.list 编辑源文件配置,注释掉原来内容并添加下述阿里云源:
1 | deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib |
然后我们执行 sudo apt update 来进行更新软件源信息,并通过 sudo apt upgrade 来获取新的软件包版本。

我们还需要构建 Python 3.7.0 的开发环境,在此之前我们可以在 Python 源代码版本 |Python.org 中选择自己需要的 Python 版本并进行下载,本文所演示的是 3.7.0
在 /bin 目录下执行 curl.exe -O https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz,然后 tar -xf Python3.7.0.tar.xz 来进行解压(然后删除该压缩包),之后我们还需要通过 apt-get install build-essential 来下载 Debian 所需要的开发工具包。
1 | 开始构建 Python 之前,为了保证之后的 pip 可以正常运行,我们需要通过 [兹利布主页 (zlib.net)](http://www.zlib.net/) 来获取最新的 zlib,通过 ```curl``` 下载后使用 ```./configure``` 和 ```make``` 以及 ```make install``` 进行构建 |
1 | 为了保证之后的 ```pip``` 可以正常的安装,我们还需要通过 ```sudo apt-get install openssl``` 来安装 openssl ,然后进入到 Python 目录执行 ```./configure --with-ssl``` 和 ```make``` 以及 ```sudo make install``` 重新进行编译。 |
进入到 Python3.7.0 文件中,执行 ./configure --with-zlib-dir=/usr/local/lib 和 ./configure --enable-optimizations 然后开始编译 make -j 8 和 make altinstall 然后运行 python3.7 即可。
之后我们通过 whereis python3 来获取 python3.7 的文件位置,并通过 PyCharm 中的 setting - Project Interpreter - Add 来进行添加即可。

安装 PHP 7.4 环境我们可以使用 apt-get install php7.4 libapache2-mod-php7.4 php7.4-common php7.4-gd php7.4-mysql php7.4-curl php7.4-intl php7.4-xsl php7.4- mbstring php7.4-zip php7.4-bcmath php7.4-soap php-xdebug php-imagick php7.4-redis 来进行安装一些基础的操作,同样的如果后续 composer 报错我们也依然可以通过 apt 来进行安装。
如果你是 Phper 那么使用 WSL 在 PhpStorm 中进行交互就没有 PyCharm 那么丝滑,但同样的 PhpStorm 也支持 WSL 的开发,我们只需要在 WSL 中通过 composer 进行构建项目,之后选择项目目录即可。同样的我们也可以通过 \\wsl 目录来解决 composer 等项目的连接问题。
1 | 为了避免其他相关问题,我们还需要通过 ```sudo apt install php-mysql``` 来解决之后的数据库映射问题,如果你需要 SQLite 数据库,还需要使用 ```php |
同样的你也可以去参考下 WSL |PhpStorm (jetbrains.com) 的官方文档来进行使用。
在前面几章我们了解了 docker 的具体原理以及运作方法,之后本章主要进行演示 docker 的使用以及运行的方式,当然我们也可以选择使用 docker desktop 来进行操作。

安装 MySQL 我们可以在 docker hub 中选择我们需要的 tag 后直接通过 docker pull mysql 来进行下载,下载之后我们可以通过 docker images 来查看所下载的镜像信息。
之后,我们需要使用 docker run -itd --name dexnav -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.36 命令来创建一个容器。
| 参数 | 描述 |
|---|---|
| -itd | i 交互操作, t 终端,因为需要返回结果,因此使用交互式终端 d 守护状态运行,不会将命令输出在当前宿主机中,即在后台运行 |
| -name | 容器的名称 |
| -p | 所映射的端口 需要映射的端口:当前服务端口 |
| -e | -e,设置环境变量,加上 MYSQL_ROOT_PASSWORD 来设置 MySQL 的密码 |
redis 的安装我们可以在 docker hub 上直接搜索 redis 来查看到该 Image 的主界面,但我们通过上述两篇可以了解到,docker 主要用于构建容器等环境,我们知道这个问题就可以解决很多个疑问了。
我们可以通过使用 docker pull redis 直接来拉取最新版的 Redis,之后,我们还需要通过使用 docker run --name dexnav-redis -d -p 6379:6379 redis
如果你需要通过 RDM 等工具进行连接,那么我推荐你在 RDM 连接 Redis 配置的时候将地址写为 0.0.0.0 即可,如果是开发环境需要则写上 127.0.0.1 即可。
众所周知,容器是在镜像的基础,即一个系统他没有服务、程序他根本不算是一个系统,因此执行 docker run 的时候都会指定哪一个镜像作为容器的基础进行运行,在学习完镜像后,我们也尝试了 Docker hub 上的 Public Repository 给我们带来的便捷,本章我们主要通过 Docker commit 来了解 Docker 的构成。
你可以通过 docker run --name webserver -d -p 8081:80 nginx 去构建一个 nginx 服务器,并命名为 webserver,将其映射到宿主机的 8081 端口上,之后你可以访问 欢迎来到nginx! 去查看。
当构建完成后我们可以通过 docker exec -it webserver bash 中在正常 Linux 服务器上使用同样的操作进入到 /usr/share/nginx/html/ 目录下去自定义我们的内容,之后退出即可,当在访问 欢迎来到nginx! 的时候其更改的内容也会变动。
1 | 这主要涉及到修改了容器的文件,即容器的存储层,你可以通过 ```docker diff``` 看到具体的改动 |
之后,我们可以通过 docker commit 命令来将容器的存储层保存下来成为镜像,主要是在容器的基础上加上了存储层,使得有了数据,之后你改动也是直接覆盖存储层上,以后我们更改并运行这个镜像的时候,就会拥有这个容器最后的文件变化。
1 | ❯ docker commit -a "sun.lk<lk.sun@jiangxue.team>" -m "Upgrate:home file of info" webserver nginx:mytest |
上述命令主要通过 docker commit 来提交者信息,其中 -a 参数主要用于描述提交者信息,而 -m 于 github 一样用于描述提交,之后的 webserver 是容器的名字以及 image:tag 等,这些你可以在 Docker Desktop 中以图形化或者 docker image ls nginx 的方式进行查看,更多的可以参考 docker 容器提交|Docker 文档
1 | ❯ docker image ls nginx |
1 | 当然我们也可以通过 [docker 历史|Docker 文档](https://docs.docker.com/engine/reference/commandline/history/) 文档中记载的 ```docker history``` 来查看历史提交,比如 ```❯ docker history -H nginx:mytest``` 来查看 image 的历史记录 |
当定制好 Image 之后,我们可以通过 docker run --name web -d -p 8082:80 nginx:mytest 来进行运行, 将 nginx:mytest 镜像命名为新的服务为 web,并映射到宿主机的 8082 端口,之后访问 localhost:8082 其内容于我们 build image 的数据完美无瑕。
在 Docker Desktop 中,你可以通过图形化的方式将镜像上传到 Docker Hub 中,这与 GitHub 非常类似,之后你也可以发布属于你自己的容器镜像,供他人使用。
1 | docker commit 只是非常直观的演示 image&container 的概念,但由于全程黑箱操作,这也意味着他人使用起来也不会立马就知道这个镜像是做什么的,对于之后的维护是非常痛苦的。 |
在上述的 “ Run image” 章节中,了解到镜像的制作我无非就是添加文件、配置然后修改、安装、构建、操作的命令携程脚本,之后用脚本构建、定制镜像,以此来解决之前黑箱操作透明性和可读性不强的问题,通过 Dockerfile 就可以很好的解决。
制作 Dockerfile 之前,我们首先在指定磁盘中建立一个文件夹,并进入到此文件夹中,创建一个新的文本文件,命名为 Dockerfile 即可,比如我们要通过 Dockerfile 来实现在 Buid image 章节中的修改 nginx 下的 index.html 文件,我们可以写入:
1 | FROM nginx |
其中FROM指令主要是指定基础镜像,而之后的RUN则是运行命令,你甚至可以将他当作 shell 脚本去写,更多的你可以参考Best practices for writing Dockerfiles | Docker Documentation写的非常详细。
之后,在Dockerfile文件所在的目录内运行 ❯ docker build -t nginx:mytest-v1 . 需要注意的是,我们使用的 docker build 命令下的 -t 参数主要用于指定 Name:tag 然后通过 “.” 来表示当前目录下进行构建。
1 | 一般来说 Dockerfile 放置在空目录下或者项目的根目录,然后根据上下文对镜像进行构建,同样的你可以通过 ```-d``` 参数来搭配上下文指定某个文件作为 Dockerfile,在 Docker 中并没有前置性的要求,只不过大家习惯了直接以 Dockerfile 命名的方式。 |
Docker build 还可支持铜鼓 git repo 进行构建,这将克隆 GitHub 存储库,并将克隆的存储库用作上下文存储库根目录下的 Dockerfile 用作 Dockerfile。您可以使用 或 方案指定任意 Git 存储库,当然者并不拘束于你使用 HTTP 还是 Git 的传g输方式。
当然 Docker 还不仅仅局限于 HTTP 和 Git 的传输方式,它还支持压缩文件的形势来进行构建,你可以继续查阅 docker build |Docker 文档 获取更多的信息。构建完成后你可以通过 localhost:8083 来进行访问,结果和上面我们使用 Docker commit 方式构建的结果还是一摸一样的。
对于之后的 Dockerfile 指令,可以通过 编写 Dockerfiles |的最佳实践Docker 文档 进行查阅,剩下的指令 :
| Name | Info | Url |
|---|---|---|
| LABEL | 标签,一个 image 可以拥有多个标签,可以通过标签来组织镜像的记录、许可等信息,同时用于批注容器、卷和网络之间,可以理解为注释 | 编写 Dockerfiles 的最佳实践Docker 文档 |
| FROM | 编写 Dockerfile 的入口,即指定 image | |
| RUN | 构建 Docker image 时所触发的命令 | |
| CMD | 在启动创建 docker image 时所触发的命令 | Dockerfile中RUN和CMD之间的区别 (qastack.cn) |
| EXPOSE | 声明容器运行时所提供的服务端口(仅仅是一个什么声明,在容器运行的时候不会因为他就会开启这个服务端口,但之后使用 docker run -P 时,也许会使用 EXPOSE 的端口) |
|
| ENV | 设置环境变量,可配合 RUN 进行使用 |
ENV 设置环境变量 - Docker —— 从入门到实践 (gitbook.io) 比官方文档写的更加直观 |
| COPY | 复制 | |
| ADD | 复制,COPY 的升级版,可以通过 URI 等形势进行,同时,也可以通过 --chown=<user>:<group> 来改变文件的所属用户的组 |
|
| ENTRYPOINT | 我理解为是 RUN 在容器启动中时所执行的命令的实现 | Dockerfile 中的 ENTRYPOINT. ENTRYPOINT是 Dockerfile 定义的一个指令,他的作用类似于… by Justin Chien Medium 直观了解 ENTRYPOINT 的作用 |
| VOLUME | 为了让数据持久化以及共享容器之间的数据,通过 VOLUME 指令绕过默认的联合文件系统,以正常的文件\目录的形势存储在宿主机上 | volume详解 · Docker – 从入门到实战 (baoshu.red) or 深入理解Docker Volume(一) - DockOne.io 配合阅读深入理解 |
| USER | 指定用户 | |
| WORKDIR | 工作目录 | Dockerfile reference Docker 文档 |
Docker 是一个平台即服务的产品,使用操作系统进行虚拟化,并称之为容器的包中运行,并隔离、捆绑自己的软件,在技术发展的今天,实际上可以以通过 Docker 打包我们所需要的一切,包括 PHP\Mysql\Nginx 配置文件。
在此之前,我们主要通过手动来构建 LAMP 、XMAPP 环境,之后出现了诸如宝塔、小皮、Laragon 等较为简单的图形化开发环境构建工具,在 2010 年之后,开发人员的趋势逐渐上升到虚拟机环境,与生产环境的复制使得网站真正上线时也会很少出现问题。
直到近几年出现了 Vagrant 这类工具的出现,消除了虚拟机的种种麻烦,除此之外在微服务的应用中,也会经常使用 Vagrant 来搭建集群。
但即使 Vagrant 如此方便,他的系统资源消耗无非是一个绕不开的问题,同时虚拟机和服务器之间的同步又造成了另外一个问题的产生,以及整体生态,和版本的分发都很难控制,甚至是多元,因此 Docker 就成功的避免了这类问题。
1 | Docker 是一组平台即服务的产品,它可以通过系统级的虚拟在容器的包中交付软件、项目等,容器之间彼此隔离,并拥有自己的软件、库和配置文件,使得他们可以通过明确定义来相互通信 |
实际上最能体现 Docker 的方便时允许我们打包网站服务所需的一切,即代码和可执行文件、甚至是数据库和服务依赖所需的配置文件,打包在一起成为应用。
Docker 最为重要的三个概念就是 DockerFile 、 Image、Container 即 Docker文件、镜像、容器,首先 DockerFile 理解起来较为容易,他包含了需要部署的应用程序和其相关联的库(vagrant 也有)。
对于 DevOps 来说,最希望的就是一次创建和配置可以在任何地方所正常的与运行,因此使用 Docker 可以通过镜像来实现持续的集成、交付和部署,也可以通过 DockerFile 来进行镜像的构建。
image 即镜像,是 Docker 中较为特殊的文件系统,提供了容器运行时所有需要的程序、资源、配置、依赖库等,还包含了以些为运行时所准备的配置参数,但不包含动态数据。
容器是镜像中的一部分,它可以被创建、启动、删除甚至是暂停等,通俗的理解可以是一个单纯的进程,运行着独立的命名空间和文件系统、自己的网络配置和环境、
通过 DockerFile,可以创建许多不同的容器(Container),可以将容器理解为虚拟机,里面运行着 DockerFile 的应用、服务等,且每个容器独立运行不相互影响。而最后的 Image,就是通过 DockerFile 来进行创建的,使得让你的容器打包运行分享到仓库中。
当镜像构建完成后,如果需要在除了在本机之外上运行,就需要使用 Docker Registory 这样的服务,当你注册完一个 Docker Registry 中可以包含多个仓库(Repository),并包含了多个标签(Tag),每个 Tag 中都对应着一个镜像。
在 Windows 10 平台中使用 Docker,你可以在获取 Docker |Docker 文档 中进行选择系统并下载,之后再功能中开启 Hyper-V 以及确保 wsl 可以正常使用的情况下,即可成功的启动 docker Desktop 并在 Windows 终端中输入 docker version 查看是否正确安装了 Docker。
1 | 请确保你的 Windows 系统为专业版,家庭版和企业版是没有 Hyper-V 功能的,Docker 在 Windows 中主要依赖的还是 wls server 来进行构建镜像等。 |
在 Docker Hub 中有大量的镜像供我们使用,同时我们也可以自己创建并上传一个开放仓库,但在此之前我们主要先获取镜像, 这里我们主要以 php 的镜像为例,docker pull php:7.4.27-zts-buster 你可以通过此来拉取镜像。
通过 pull 拉取镜像后,就能够以这个镜像为基础来启动一个容器,通过 docker run 来直接进行启用:
1 | docker run -it --rm php:7.4.27-zts-buster -v |
docker rum 的格式为 docker run [参数] [镜像名] command ,当然,docker run 只是一个基础命令,他还有一系列的参数,就以上述三个参数为切入点我们可以知道:
| Name | Info |
|---|---|
| run | 运行容器的命令 |
| -it | |
-t 终端,因为需要返回结果,因此使用交互式终端 |
|
-i 交互式操作 |
|
| -rm | 容器推出后删除数据(在不需要保留结果的场景时使用) |
| -t | Docker 分配一个伪终端(pseudo-tty)并将其绑定输出 |
| -i | 使容器标准输入保持打开 |
| -d | 守护状态运行,不会将命令输出在当前宿主机中,即在后台运行 |
| bash | 进入交互式 shell |
容器的核心理念时一个可执行的程序,所有需要的资源都是通过应用程序运行所必须的,因此我们可以通过 docker container start/stop 来决定容器的启动和关闭。
通过 docker pull 我们已经将 php:7.4.27 版本的镜像给拉去下来了并且成功的使用,之后我们也可以通过 docker image ls 来查看已经下载下来的镜像,对于 Windows 来说,还可以通过 Docker Desktop 来进行图形化的操作。
1 | 对于镜像的体积,通过 ```docker image ls``` 来进行查看的镜像大小/所占空间会与 Docker Hub 中的不同,Docker Hub 中显示的是压缩后的体积,方便下载和上传过程中更快,因此处于压缩状态。而 Docker image ls 显示的是下载本地后解压、展开后的大小。 |
至于“悬空镜像: <note>” 中文更多的被翻译为 “虚悬镜像”,这种镜像在此之前是拥有过 Tag的,后来随着其维护者重新发布了新的版本,并且 tag 没有改变的时候,由于新旧镜像同名,旧的镜像则会被取消。
你可以通过 docker iamge ls -f dangling=true 来进行显示,按照官方文档的逻辑来说,这些镜像是无法使用的因此你可以使用 docker image prune 来进行删除,你甚至可以使用 docker rmi $(docker image -f "danglig=true" -q) 来批量的进行删除。
1 | ```rmi``` 属性支持删除一个或多个镜像,以上述参数 "-f" 为例,在此是过滤列出镜像的意思,也许在真实的环境更多的可以参考 [docker 图像修剪|Docker 文档](https://docs.docker.com/engine/reference/commandline/image_prune/) |
在一些书籍中,将被隐藏的镜像称之为中间层镜像,亦为了加速镜像的构建、重复利用资源的以节省消耗,Docker 会使用中间层镜像来进行加速,如果将中间层镜像删除,那么也会导致依赖此中间层镜像的镜像缺失一些信息从而无法运行。
假设你通过删除某一个镜像,那么该镜像所依赖的中间层镜像也将会被删除,你可以通过 docker image ls -a 来进行查看,对于此命令你可以在 docker image ls |Docker 文档 中进行阅览。
同样的,你也可以通过 docker image ls php 来搜索关于 php 的顶层镜像,并且它还支持仓库名+标签。
如果需要删除镜像,那么可能还需要通过 docker image rm image1 image2 ……来进行删除,同时,它还支持使用 docker image ls 列表中的 REPOSITORY:TAG 和 IMAGE ID 进行删除,其在 IMAGE ID 中,还分为长ID和短ID,例如:
1 | ❯ docker image ls |
其中,使用 bd9 还是 bd9a9f733898 都是可以删除的,通过上述我们了解到的命令,也可以自由进行搭配,比如 -f 参数来进行过滤,你可以自由搭配,比如删除所有在 php7.4.27 之前的镜像 $ docker image rm $(docker image ls -q -f before=php:7.4.27-zts-buster)。
1 | 对于 Docker 的删除行为一共分为两类,一类是 Untagged 即标记删除,而另一类则是 Deleted删除,镜像的唯一标识是ID,而一个镜像可以拥有多个标签。 |
在 Docker Cli 中,还有很多类似的命令搭配,对于 image 你可以参考 docker 映像|Docker 文档 来进行使用。
在此之前我们需要了解到 winget 和 scoop 的概念,winget 可以使得用户能够发现、安装和删除的 windows 10\11 上的 windows 程序包管理器。
在 windows 10 之前,通常程序包管理器诸如 Debian 系的 apt-get,Arch Linux 阵营的 pacman 和 openSUSE 下的 zypper 以及 Red 家族中的 Yum 都是系统中最为依赖的基础命令之一。
而至于 scoop ,他主要是 winget 的另一种解决方案,在 winget 还未出现之前大多数是通过 scoop 来适用于 Windows 的命令行程序包管理器。
由于 winget 是 Windows 10\11 下自带的,我们无需安装,主要的安装步骤是 scoop,在他的官网中,详细的告诉我们了需要确保安装了 PowerShell 5(或更高版本,包括 PowerShell Core)和 .NET Framework 4.5(或更高版本)。然后运行:
1 | Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') |
最近在 QQ 上遇到了很多可可爱爱的小伙伴们用的基本上都是 Linux 上的技术栈,虽然我之前尝试了很多 Linux 发行版,诸如 Debian、Deepin、Ubuntu、ArchLinux、Manjaro、Ubuntu mate、Bunsen Labs、Raspberry Pi、Linux Mint、OpenSuse、CentOS 、Elementary OS、Linux Kali、Parrot os 等。
期间使用最久的就是 Debian 系的 BunsenLabs 和 ArchLinux、OpenSUSE 这些,最终 Linux 作为主系统的生涯结束在了 BsenLabs,我喜欢他基于 Debian 的生态和拥有 Arch Linux 可对系统进行一定的自定义,使得具有稳定和高效的生产力环境。
但最后由于工作迫使我结束了 Linux 的生涯,之后看到群里面的小伙伴们通过 vi/vim & neovim 和 Emacs 属实是被圈粉了,我个人是一个全栈开发,至于前端的话我比较喜欢用 WebStorm 来进行,至于 VScode 原谅我只会将他作为文本编辑器(因为他太顺了,我不习惯)
在此之前,我是准备直接用 Emacs 的,但群里面的以为老哥点醒了我:“如果上 Emacs,那么到头来还是要用 evil”
所以我最终选择了 Emacs,那么在此之前,我们简单概述下使用 winget 和 scoop 的区别:

在此之前我信了 neovim 文档中的鬼话,直接用 winget install Neovim.Neovim 安装后,发现之后什么操作都没给我做,甚至连环境变量都无。

迫于无奈之后通过群友安利,直接通过 scoop 来进行安装,发现简直就是对 winget 的降维打击,至于 winget 需要打包者来做一些操作,比如帮你设置环境变量之类的,而在 scoop 下直接安装即可。