JavaSE-02【类型转换和运算符】

news2024/11/15 17:17:40

第一章:数据类型转换

Java程序中要求参与计算的数据,必须要保证数据类型的一致,
如果数据类型不一致则发生类型的转换

1.1 自动转换

  • 自动转换:将取值范围小的类型自动提升为取回范围大的类型
自动类型转换原理:

一个int变量和一个byte变量进行加法运算,结果会是什么数据类型?
运算结果:变量的类型将是int类型,这就出现了数据类型的转换
如下代码:

在这里插入图片描述

  • 案例:Demo01_DataType
/**
 * 当数据类型不一致时,将会发生数据类型转换
 *  自动类型转换:隐式
 *      1、代码不需要进行特殊处理,自动完成
 *      2、数据范围从小到大
 *  强制类型转换:显示
 *
 */
public class Demo01_DataType {
    public static void main(String[] args) {
        System.out.println(1000);   //输出一个整数,默认是int类型
        System.out.println(3.14);   //输出一个小数,默认是double类型


        //int--->long
        /*
            左边是:long类型,右边默认是int类型,左右不一样
            一个等号代表赋值,将右边的int常量100,交给左边long类型的变量进行存储
            int ---> long:符合数据范围从小到大的要求
            这一行代码发生了数据类型转换:由int转向long
         */
        //long num1 =100L;
        //System.out.println(num1);
        long num2 =100;
        System.out.println(num2);//100

        //float--->double
        /*
            左边是double类型,右边是float类型,左右不一样
            float---> double,符合从小到大的规则
            也发生了自动类型转换
         */
        double num3 = 3.3F;
        System.out.println(num3);//

        //long-->float
        /*
            左边是float类型,右边是long类型,左右不一样
            long-->float,范围是float更大些,符合从小打到的规则
            发生了自动类型转换
         */
        float num4 = 60L;
        System.out.println(num4);//60.0
    }
}

1.2 强制转换

  • 强制类型转换:将取值范围大的类型,强制转换成取值范围小的类型
强制类型转换原理:
	将1.55赋值给int类型的变量会发生什么?出现编译失败,无法赋值
	即:int a = 1.55;//编译失败

	double类型内存为8字节,int类型内存为4字节,
	1.55是double类型,取值范围大于int。

	可以理解为double是8L的水壶,int是4L的水壶,
	不能把大水壶中的水直接放在小水壶中去,

	想要赋值成功,只有通过强制类型转换,
	将double类型强制转换成int类型才能赋值,
  • 转换格式:
数据类型 变量名称 = (数据类型) 被转数据值;
  • 案例:
/**
 * 强制类型转换:
 *      特点:代码需要进行特殊格式的处理,不能自动完成
 *      格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
 *
 *  注意事项:
 *      1、强制类型转换一般不推荐使用,因为有可能发生精度丢失、数据溢出
 *      2、byte/short/char这三种类型都可以发生数学运算,例如加法"+"
 *      3、byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后再计算
 *      4、boolean类型不能发生数据类型转换
 */
public class Demo02_DataType {
    public static void main(String[] args) {
        //long--->int
        //左边是int类型,右边是long类型,不一样
        //不能发生自动类型转换:int num1 = 100L;
        //格式:范围小的类型 范围小的类型名 = (范围小的类型) 原本范围大的数据
        int num1 = (int)300000000L;
        System.out.println(num1);//300000000

        //double--->int 强制类型转换
        int num2 = (int) 3.88;
        System.out.println(num2);//3 注意:不是四舍五入,而是所有的小数都会被舍弃掉

        //char和int运算
        char c1 = 'a';//字符型变量c1,存放字符a
        System.out.println(c1+1);//98 小写字母a被当做97进行运算,
        //计算机的底层会使用二进制数字表示一个字符
        //一旦char类型参与运算,那么字符就会按照一定的规则翻译成一个数字

        //byte与byte执行加法运算,byte会先自动转化成int,再进行运算操作
        byte num3 = 60;//注意右侧的数据不能超过左侧数据类型的取值范围
        byte num4 = 30;
        //byte num5 = num3+num4;//编译会报错
        // byte+byte ---> int+int=int
        int num6 = num3+num4;
        System.out.println(num6);

        //short与byte的相加运算,byte和short都会转换成int类型之后,再参与运算
        short num8 = 40;
        byte num9 = 30;
        int num10 = num8+num9;
        short num11 = (short) (num8+num9);//num8+num9 先默认执行自动转型成int。然后再强制转换成short
    }
}
  • 注意事项
1、强制类型转换一般不推荐使用,因为有可能发生精度丢失、数据溢出
2、byte/short/char这三种类型都可以发生数学运算,例如加法"+"
3、byte/short/char这三种类型在运算时,都会被提升为int类型再计算
4、boolean类型不能发生数据类型转换

第二章:运算符

2.1 算术运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMWQq7GS-1686187670125)(photo/JavaSE02_类型转换和控制符.assest/1663735067673.png)]

  • 1、算术运算符----四则与取模运算
四则运算:加 减 乘 除
运算步骤:首先计算得到表达式的结果,然后再打印输出这个结果
除法运算:除法运算使用的是整除,
		 整数除以整数,结果仍然是整数,只看商值,不看余数
取模运算:即求余数。使用符号%。(取模只对于整数运算存在意义)
注意事项:运算中出现不同类型的数据,结果将是数据类型范围大的
public class Demo04_Operator {
    public static void main(String[] args) {
        //两个常量之间进行数学运算
        System.out.println(20+29);//49

        //两个变量之间进行数学运算
        int a = 22;
        int b = 33;
        System.out.println(a+b);//55

        //变量和常量之间混合进行数学运算
        int c = 50;
        System.out.println(c+50);//100

        //整数除法运算
        int d = 31;
        int e = 2;
        int result1 = d/e;
        System.out.println(result1);//商值:15

        //取模运算
        int result2 = d%e;
        System.out.println(result2);//余数:1

        //不同类型运算,结果会是数据类型大的那种
        double result3 = d+2.5;
        System.out.println(result3);//33.5
    }
}
  • 2、算术运算符----加号的多种用法
  1、对于数值来说,+号就是加法
  2、对于字符char类型:
  		在计算之前,char会被提升为int,然后再进行计算  
        char类型字符和int类型数字之间的关系表:ASCII和Unicode
  3、对于字符串来说,加号代表字符串连接操作,
  		任何数据与字符串连接,结果都会变成字符串
  4、优先级:括号的优先级最高,先运算括号中的内容
  • 3、案例
public class Demo05_Operator {
    public static void main(String[] args) {
        //字符串类型的变量使用格式
        //格式:字符串类型 字符串变量 = 数据值;
        String str1 = "qiaodan";
        System.out.println(str1);//qiaodan

        //字符串相加。即字符的连接
        System.out.println("Hello"+"World");//HelloWorld

        //String + int = String
        String str2 = "hello";
        int num1 = 22;
        System.out.println(str2+num1);//hello22

        //优先级:括号的优先级大于其他
        String str3 = "James";
        System.out.println(str3+10+10);//James1010
        System.out.println(str3+(10+20));//James30
    }
}
  • 3、算术运算符----自增自减运算
1、自增符号:++
2、自减符号:--
3、基本含义:让一个变量增长一个数字1,让一个变量减少一个数字1 
4、使用格式:写在变量之前,或写在变量之后;++a,a++,b--.--b
5、使用方式:  
   1)、单独使用:不和其他任何操作混合,自己独立成为一个步骤 
   2)、混合使用:和其他操作混合
6、使用区别: 
   1)、在单独使用的时候,前++和后++没有什么区别,
   	   也就是 ++a,a++是一样的 
   2)、在混合使用的时候,区别如下:    
       区别1:如果++在前,变量会立刻加1.拿着结果进行运算。
       		 【先自增后运算】 
       区别2:如果++在后,变量首先使用本值参与运算,然后变量再加1。
             【先运算后自增】
7、注意事项:只有变量才能自增,自减运算符,常量不可以
public class Demo06_Operator {
    public static void main(String[] args) {
        //单独使用
        int num1 = 100;
        System.out.println(num1);//100
        ++num1;// ++在前
        System.out.println(num1);//101
        num1++;// ++在后
        System.out.println(num1);//102

        System.out.println("-----------------------------");

        //混合使用 ++在前
        int num2 = 200;
        //变量先+1,然后打印结果
        System.out.println(++num2);//201
        System.out.println(num2);//201

        System.out.println("-----------------------------");

        //混合使用 ++在后
        int num3 = 300;
        //变量选运算,//运算结束后在+1
        System.out.println(num3++);//300
        System.out.println(num3);//301

        System.out.println("-----------------------------");

        //混合运算--和赋值相结合1
        int num4 = 40;
        //前--。变量立刻-1.编程39.再赋值给result1
        int result1 = --num4;
        System.out.println(result1);//39
        System.out.println(num4);//39

        System.out.println("-----------------------------");

        //混合运算--和赋值相结合2
        int num5 = 50;
        //后--,变量先把原来的值50赋值给result2.然后-1,变成49
        int result2 = num5--;
        System.out.println(result2);//50
        System.out.println(num5);//49

        System.out.println("-----------------------------");

        //++ . --混合
        int x = 22;
        int y = 33;
        int result3 = x++ + --y;
        System.out.println(result3);//54
        System.out.println(x);//23
        System.out.println(y);//32
    }
}

2.2 赋值运算符

  • 赋值运算符
概念:就是将符号右边的值,赋值给符号左边的变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2zQg3Gx-1686187670127)(photo/JavaSE02_类型转换和控制符.assest/1663754545867.png)]

 赋值运算符:
   基本赋值运算符:单个“=”,代表将右侧的数据交给左侧的变量保存。如:int a = 10;
   复合赋值运算符:
       +=  a+=1    等价于     a=a+1
       -=  b-=2    等价于     b=b-2
       *=  c*=3    等价于     c=c*3
       /=  d/=4    等价于     d=d/4
       %=  e%=5    等价于     e=e%5
  注意事项:
   	1、只有变量才能使用赋值运算符,常量不能进行赋值
   	2、复合运算符其中隐含了一个强制类型转换
    public static void main(String[] args) {
        int a = 5;
        a+=5;//即:a=a+5,也就是变量a先加5,再赋值给变量a
        System.out.println(a);//输出结果是10
    }
  • 练习 Demo07_Operator
/**
 * 赋值运算符:
 *  基本赋值运算符:单个“=”,代表将右侧的数据交给左侧的变量保存。如:int a = 10;
 *  复合赋值运算符:
 *      +=  a+=1    等价于     a=a+1
 *      -=  b-=2    等价于     b=b-2
 *      *=  c*=3    等价于     c=c*3
 *      /=  d/=4    等价于     d=d/4
 *      %=  e%=5    等价于     e=e%5
 * 注意事项:
 *  1、只有变量才能使用赋值运算符,常量不能进行赋值
 *  2、符合运算符其中隐含了一个强制类型转换
 */

public class Demo07_Operator {
    public static void main(String[] args) {
        // +=练习
        int a = 10;
        a+=5;//a = a + 5  a=15
        System.out.println(a);//15

        // -= *= /+同上

        //%=练习
        int b = 11;
        b%=3;//b = b % 3  b=2
        System.out.println(b);//2

        //隐含强制类型转换
        byte c = 5;
        //byte c = c + 5
        //byte c = byte + int
        //byte c = int + int
        //byte c = int
        //byte c = (byte) int
        c+=5;
        System.out.println(c);//10
    }
}

2.3 比较运算符

  • 比较运算符
概念:两个数据之间进行比较的运算,运算结果都是布尔值,
     即true或者false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b8u8diND-1686187670128)(photo/JavaSE02_类型转换和控制符.assest/1663764821303.png)]

  • 注意事项
  1、两个等号== 表示比较符号两边数据是否相等,单个 = 表示复制
  2、比较运算符的结果一定是boolean值,成立是true,否则是false     
  3、如果进行多次判断不能连着写
  • 练习 Demo08_Operator

    public class Demo08_Operator {
        public static void main(String[] args) {
            //常量比较
            System.out.println(10 > 5);//true
            System.out.println(5.5 < 1.5);//false
    
            //变量比较
            int num1 = 10;
            int num2 = 20;
            System.out.println(num1 > num2);//false
    
            //混合使用
            System.out.println(num1 >= 10);//true
            System.out.println(num1 <= 10);//true
            System.out.println(num2 == 20);//true
            System.out.println(num2 != 30);//true
    
            //多次判断不能连着写
            int num3 = 30;
            //System.out.println(20<num3<40);//编译错误
        }
    }
    

2.4 逻辑运算符

&&全部是true,才是true,否则是false
||至少一个是true,就是true,全部是false,才是false
本来是true,变成false。本来是false,变成true
逻辑运算符:
   与 (并且) &&  全为true,才是true。否则为false
   或 (或者) || 至少一个为true,即为true。全false。才false
   反  (取反) !  原本是true,取反为false,原本是false,取反为true
 
   注意事项:
       &&且 、||或,具有短路效果,
       即:如果左边可以判断得到最终结果,
       	   那么右边的代码将不再执行,从而提高性能
  • 练习 Demo09_Operator
public class Demo09_Operator {
    public static void main(String[] args) {
        //&&且
        System.out.println(true && true);//true
        System.out.println(true && false);//false
        System.out.println(false && false);//false

        //||或
        System.out.println(true || true);//true
        System.out.println(true || false);//true
        System.out.println(false || false);//false

        //取反
        System.out.println( !false);//true
        System.out.println( !true);//false

        //短路效果
        int a = 10;
        System.out.println(1 > 2 && ++a < 100);//false
        System.out.println(a);//10

        int b = 20;
        System.out.println(1 < 2 || ++b < 100);//true
        System.out.println(b);//20
    }
}

2.5 三元运算符

   一元运算符:只需要一个数据就可以操作的运算符。如:自增 自减
   二元运算符:需要两个数据才能操作的运算符。如:加法
   三元运算符:需要三个数据才能操作的运算符。
 
   三元运算符:
       格式:数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B
       流程:首先判断条件是否成立:二选一
               条件成立为true,取表达式A的值赋值给左侧变量
               条件不成立为false。取表达式B的值赋值给左侧变量
 
   注意事项:
       1、必须同时保证表达式A和表达式B都符合左侧数据类型的要求
       2、三元运算符的结果必须被使用

练习 Demo10_Operator

public class Demo10_Operator {
    public static void main(String[] args) {
        int a = 30;
        int b = 40;
        //如果a>b为true。则将表达式a赋值给变量c。并输出
        int c = a > b ? a : b;
        System.out.println(c);//40

        //简化写法
        System.out.println(a < b ? a : b);//30
    }
}

2.6 运算符注意事项

  • byte、short、char的使用注意事项
1、对于byte、short、char三种类型来说,
   如果右侧赋值的数值没有超过范围,
   那么javac编译器将会自动隐含的为我们补上一个(byte)(short)(char)

2、如果右侧超过了范围,那么编译器就会报错

3、编译器的常量优化
   如果右侧的表达式中都是常量,没有任何变量参与运算
​   short result = 2+3; //等号右边全部是常量,没有任何变量参与运算
​   在代码编译之后等到的.class文件的结果是:
		short result = 5;(注意此时代码还没有运行)
​   这被称为是“编译器的常量优化”
   但是一旦表达式中出现变量参与运算,就不存在此种优化 
  • 案例 Demo12_Notice
public class Demo12_Notice {
    public static void main(String[] args) {
        //1、右侧数据值没有超过左侧的范围
        //等号右侧确实是int类型,但是数据值没有超过左侧的范围,就是正确的
        //右侧的数据值不是int--转byte。不是自动类型转换
        byte num1 = /*(byte)*/33;//右侧数据值没有超过左侧的范围,编译器会自动隐含的补充一个(byte)
        System.out.println(num1);//33

        //2、右侧数据值超过了左侧的范围
        // byte num2 = 130;//编译报错

        //3、char
        // 右侧的数据值不是int--转char。不是自动类型转换,没有超出范围
        //编译器将会自动补充上一个隐含的(char)
        char c1 = /*(char)*/97;
        System.out.println(c1);//a

        //4、short
        short a = 1;
        short b = 2;
        short result1 = (short) (a+b);//变量相加,short会自动转为int,进行运算。左侧需要是int,或者强转
        short result2 = 1+2;// 数值相加,在编译期间就已计算完毕,即short result2 = 3;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql锁知识记录积累(一)

1.关于脏读、幻读和不可重复读 脏读&#xff1a;一个事务A读取到了另一个事务B未提交的数据&#xff0c;叫做脏读 不可重复读&#xff1a;事务A被事务B干扰到了&#xff01;在事务A范围内&#xff0c;两个相同的查询&#xff0c;读取同一条记录&#xff0c;却反返回了不同的结…

运行一个新vue项目踩坑

npm install报错了&#xff0c;主要是因为node版本太高了。去node官网&#xff0c;下载低版本的msi后缀的文件&#xff0c;运行安装。在vs code里&#xff0c;npm下载依赖&#xff0c;并运行即可。 1. 无法cnpm cnpm : 无法加载文件 D:\Program Files\nodejs\node_global\cnpm.…

前端放大镜效果实现

放大镜效果实现 放大图片的需求&#xff0c;一般是在原有的渲染之上&#xff0c;额外添加一个放大框&#xff0c;当鼠标在原图上移动&#xff0c;放大框内就以当前的鼠标为中心&#xff0c;局部放大一定范围&#xff0c;在淘宝商城中是常有的实现。下面将用两种实现。 1、使用d…

是德 DSOX1202A示波器技术参数

KEYSIGHT是德科技 lnfiniiVision 1000 X 系列示波器是具有专业级功能的入门级示波器&#xff0c;配备的联网软件可提供远程控制和数据记录等功能。 它集 6 种仪器的功能于一身&#xff0c;属于是德科技智能测试台必备仪器之一。该系列包含 4 款独具特长的仪器&#xff0c;通过同…

5年功能测试要18K,一问三不知,还反过来怼我,真是醉了····

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

坚持#第418天~久违了,二维码系统

公司有了一个新客户&#xff0c;这家客户的货物都是用铁架框装的&#xff0c;铁架框长得都一样&#xff0c;不好区分&#xff0c;只能看标签来识别&#xff0c;而且发货时需要一一核对发货单上的交货单号对应的货物&#xff0c;标签上的发货单号必须要一致才行&#xff0c;导致…

【干货】Kali Linux渗透基础知识大全,零基础入门必看!

最近好多朋友问我&#xff1a;不会编程&#xff0c;英语也不好&#xff0c;dos命令也记不住&#xff0c;能学习黑客技术么&#xff1f; 我可以明确告诉大家&#xff0c;可以的&#xff01; 相信每一个少年心中&#xff0c;曾经都有过一个黑客梦&#xff01; 有人觉得黑客霸气…

常用的开源自定义表单有哪几大优势特点?

当前&#xff0c;办公已经进入流程化和自动化的阶段&#xff0c;要想跟随着社会发展&#xff0c;引用开源自定义表单工具可以使办公协作效率得到快速提升&#xff0c;它的灵活、便捷、易操作等特点&#xff0c;使得该表单工具深受当今职场的喜爱&#xff0c;是做好数据管理&…

Flutter 库:强大的下拉刷新上拉加载框架——EasyRefresh

Flutter 库&#xff1a;强大的下拉刷新上拉加载框架——EasyRefresh 文章目录 Flutter 库&#xff1a;强大的下拉刷新上拉加载框架——EasyRefresh一、概述1、简介2、特征3、在线演示4、APK下载5、接口参考 二、官方示例1、默认构造函数2、生成器构造函数3、指示器定位4、使用指…

2023年网络安全HW攻防技术总结(珍藏版)

2022年护网正当时&#xff0c;相信不少网安人都已经进入了状态。 我们都知道&#xff0c; 护网行动 是国家应对网络安全问题所做的重要布局之一。至今已经是7个年头了&#xff0c;很多公司在这时候人手不够&#xff0c;因此不得不招募一些网安人员来参加护网。 红队 扮演攻击…

Linux搭建Java环境——安装JDK

一、上传jdk1.8文件 首先通过Xftp 7软件&#xff0c;将jdk文件传输到Linux上&#xff08;连接和Xshell 7方法相同&#xff0c;软件资源在首页中的下载栏处免费获取&#xff09;当然需要在opt文件夹下先新建jdk的文件夹 二、解压jdk文件 解压完成后可以发现蓝色的jdk1.8的目录生…

Android Studio实现五子棋小游戏

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、验证码3、AI人机4、背景音乐 四、运行演示五、项目总结 一、项目概述 五子棋是一种两人对弈的策略型棋类游戏&#xff0c;本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI&#xff0c;实…

SQL语言的规则与规范

SQL语言的规则与规范 前言一、SQL概述1、SQL背景知识2、SQL语言排行榜3、SQL 分类 二、SQL语言的规则与规范1、基本规则2、SQL大小写规范 &#xff08;建议遵守&#xff09;3、注 释4、命名规则&#xff08;暂时了解&#xff09;5、数据导入指令 前言 本博主将用CSDN记录软件开…

怎么用pe系统重装系统,如何用pe重装系统

其实&#xff0c;电脑装系统并没有这么难&#xff0c;尤其是u盘pe系统相对来说比较简单一点。但是&#xff0c;现在还有很多朋友一直在问这个是怎么装系统的&#xff0c;关键是装系统耗的时间比较长&#xff0c;步骤好像很复杂的样子&#xff0c;担心自己操作出现失误。确实&am…

Ansys Zemax | 如何以数据的方式定义网格矢高表面

引言 本文示范了如何输入表面起伏数据&#xff0c;以定义Zemax OpticStudio中的网格矢高 (Grid Sag) 类型表面&#xff0c;表面起伏数据应为Z坐标轴上的矢高 (Sag)。(联系我们获取文章附件) 正文 表面起伏数据格式是这样定义的&#xff1a; 第一行&#xff0c;由7个数字表示。 …

ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析

编辑-Z 本文将对TDK5100F射频模块进行详细的介绍与分析&#xff0c;包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述&#xff0c;希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点 TDK5100F射频模块是一款高性能的…

IPV6地址基础

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议。其地址数量号称可以为全世界的每一粒沙子编上一个地址 1. ipv6地址表示方法 IPv6的…

【前端播放器】前端播放器的时延问题小总结

目录 结论 播放器的优化测试与小结论 结论 根据理论知识&#xff0c;及代码查看&#xff0c;实验后 【ZLM】ZLM源码阅读三----延时问题_dualven_in_csdn的博客-CSDN博客 发现&#xff0c;结论大概与文中相同 &#xff1a;主要的延时&#xff0c;主要是播放器端形成的。 播放…

科技数据分析,2022年授权通过的专利数高达近80万项

哈喽大家好&#xff0c;中国科技发展在近年来取得了巨大进步&#xff0c;相关部门也积极推动科技创新&#xff0c;加大科技投入&#xff0c;鼓励企业加强研发&#xff0c;加速科技成果转化落地。此外&#xff0c;中国还在国际科技合作方面取得了积极进展&#xff0c;与各国合作…

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx,同时将图库上传至阿里云 OSS

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx&#xff0c;同时将图库上传至阿里云 OSS 本文章采用几个任务执行 最终想要实现效果&#xff0c; 1、golang做成一个服务占用一个端口&#xff0c;然后监测gitlab仓库webhook 2、前端人员提交代码到gitlab&#xff…