• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

01 go python Java 对比 go语法 变量 数据 类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、语言基础普及(很重要)

1.编译型语言和解释型语言(都属于高级语言)

1.编译型(类似于谷歌翻译)  
     例如:
     go:谷歌出品必属精品   c,c
+,   c#:微软(当初收钱作死,然后就凉了)   java:sun公司,后来被甲骨文收购了(竟然开始收费了,市场份额开始下降,怕是下一个c# 一次翻译之后,就可以拿着翻译之后的结果可以去多次运行 编译的过程需要用到编译器 优点:执行效率高 缺点:开发效率低 2.解释型(类似于同声传译) 例如:python,php,js 一行一行的翻译(读一行翻译一行) 解释的过程需要用到解释器 优点:开发效率高 缺点:执行效率低

2.什么是闭包函数和一等公民

1.闭:定义在函数内部,对外部函数作用域有引用(内部函数将自己函数名返回给外部函数,外部函数加括号就可以调用内部函数)
2.闭包函数典型应用:装饰器
//go语言中,函数是一等公民,像int、string等一样可以把函数赋值给一个变量
// 不是所有的函数都是一等公民,go和python是,java就不是,所以go和python实现闭包直接接收函数返回出来就好了,java实现闭包时很麻烦
package main
import "fmt"

func test(a int) (int,int) {
    return 1,2
}

func main() {
    var a func(a int)(int,int)  //上面有几个参数,返回值什么类型等必须一毛一样
    a=test  //函数赋值给变量
    a(1)  // 就是 test(1)
    fmt.Println(a(1))  // 1,2
}

 

3.动态静态语言、强弱类型

动态类型语言:写程序时不用声明任何变量的数据类型,在运行期间才去做数据类型检查的,如python
静态类型语言:在写程序时要声明所有变量的数据类型,编译期间就要做数据类型进行检查,如java

强类型定义语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,如java,python
弱类型定义语言:数据类型可以被忽略的语言,一个变量可以赋不同数据类型的值,如VBScript

Python   是动态 强类型定义语言(类型安全的语言)
JAVA go  是静态 强类型定义语言(类型安全的语言)
VBScript 是动态  弱类型定义语言(类型不安全的语言)

4. java入门知识

-c开发:
        不支持跨平台,在windows上开发,编译好的只能在windows上用,到linux上需要再编译一下
    
    -java横空出世:凭借‘跨平台,一处编码到处运行’迅速走红
        -运行在java虚拟机之上,只需要开发出不同系统的虚拟机就好了,类似于python解释器但是又不同,所以一直争议java到底是什么语言
        -编译成字节码文件(中间态):1.先编译成中间态,拿中间态去执行,所以可以跨平台,并且速度提高 但还是没有原生二进制快,
                              2.字节码是加密的,直接看不懂,但是有反解软件可以还原代码,
                              3.python写的代码,别人登陆服务器就可以看到源码,python崇尚开源,js也是
    -go:跨平台编译
        -在windows平台可以编译出linux下的可执行文件
        
    -java概念普及:
        -jvm:java虚拟机,这个是必须的都要装
        -jdk:开发人员需要装jdk,又能编译又能执行
        -jre:运行java程序,需要装,不能编译
        

        -javase:java基础(学完这个就可以分方向学习,如学习安卓就不用学习其他方向了)
        -javaee:javaweb方向
            -ssh框架:spring  structs  Hibernate
            -ssm框架:spring  springmvc  mybatis(支持sql)
            -spring全家桶 :新的项目都用这个
                -springboot:一站式搞定,现在都用这个,类似于django,将orm等都封装了
                -springclode:微服务开发
        -javame:手机端开发,很早的手机中有这个,不用了现在
        -大数据:
    
         PS:
Spring进行业务流转Struts进行流程控制有bug改用springmvc了,Hibernate进行数据库操作的封装(大家都不用了,完全不用写sql,跨框架跨平台不行,改用mybatis)

django 对当次整个请求放到一个事务中怎么做:
1)调模块 代码块来做局部事务,有目的 2)装饰器实现大事务,浪费资源

5.python和go的区别

1.python函数不写return则返回none,go中什么都接收不到
2.python中_可以当作变量名接受返回值,go中就是不要这个值了,不接收
3.在go中没有位置参数和关键字参数,都是位置参数,定义函数时也没有默认参数一说
4.go中的模块、函数、变量等一旦定义,必须使用,不然报错 5.go中类型一旦定义不支持修改类型,如a:=5,可以改变a的值a:=10,但是不能改变类型a:=\'报错了\'

6.python中的包下载后会放到安装目录的文件夹,go必须放到GOPATH下,(代码也是必须放到GOPATH下src中,不然不能执行), 7.自定义的模块python中可以直接在项目中写,然后import导入即可,go则必须单独写,放在GOPATH中,然后导入
8.go的包管理混乱,很多第三方包无处安放就放在了github上,下载时从github上下载

9.go中有参函数和无参函数不是同类型,数组长度不同类型也不同,就这么严格。。

10.go中指明了参数和返回值类型,python中不强制,但是也可以实现,这在多人协同开发中很关键,防止瞎吉儿传

11.go轻量级,只需要很小几兆内存即可运行,比如java虚拟机竟然要几百兆内存,啥都不干先占内存,再扩容开辟线程
12.go编译速度很快,用c的话,编译超慢,可能要几分钟
13.python的一个列表可以放任何类型,支持步长,go同一数组以及切片只能放指定一种类型,且定长,以为切片是数组的地址引用所以肯定不能支持步长

 6.python的值传递和引用传递

go语言的数组是值类型,所有的函数传参都是copy传递
传值还是传址要分具体情况:
不可变参数是值类型,用值传递,通过拷贝进行传递的,如:数字,字符串,元组
可变参数,引用传递,修改内存,如:列表,字典

 

 

二、go入门

1.go介绍

        -go语言发展:Google
        -Go是静态强类型语言:强类型:类型固定
        -跨平台的编译型语言
        -2009年11月出的;python:1989年;  java :1990
        -go为什么这么火?
            -docker容器化   devops 比较火
            -k8s go写的:容器编排
            -区块链 :第一个开源的区块链项目是用go写的
            -性能高,特别适合服务端开发
            -部署容易

2.环境搭建

        -go开发环境:
            -下载安装对应版本,傻瓜安装即可
            -go version  查看go版本
            -环境变量会自动配置到环境变量,里面会生成项目保存路径GOPATH,以及path里面也会生成启动路径,可自定义
            -go env 查看环境,关注下面两个
                -GOPATH=C:\Users\oldboy\go    go的代码必须放在这个路径下,可以修改,见连接,修改后再次查看是否修改成功
                -GOROOT=c:\go                 go的安装路径
        -go IDE选择:
            -goland-2019.3.exe   任何ide都推荐JTBR家的,好用齐全,操作和pycharm基本一样
            -vs code   不推荐

3.hello

//单行注释
/*
多行注释
多行注释
*/
package main //表示当前go文件属于main包,所有文件开头都这样写,上面不能出现代码
import "fmt" //导入fmt包,go中导入的包必须使用,定义的变量也必须引用,不然就报错

// 编译型语言需要有一个入口文件  main包下的main函数
func main() { //定义了一个main函数

    fmt.Println("hello world") //打印helloworld,go中都用双引号
    //a 是编辑器给你提示的,参数名是a,后面会解释

}
    执行方式:
        方式一:IDE中,绿三角编译并执行
方式二:
编译并执行 (和右键绿三角本质一样,不生成exe文件) -go run 文件名
方式三:
先编译再执行 -go build 文件名.go 编译生成‘ 文件名.exe’ 这个就可以拿到各个平台执行 -文件名执行

4.变量

//变量
package main //表示是main包的
import "fmt"

func main() {
    //定义变量三种方式
      // 完整版 定义了一个int类型的a ,把10赋值给他
        //var a int=10
        //fmt.Println(a)
     //省略类型 类型推导 会自动推导识别出类型
        //var a =10
        //fmt.Println(a)
      //简略声明  不写var不写类型
        //a:=10
        //fmt.Println(a)

    //变量可以重新赋值,但不能重复定义
      //var a int=10
      //a=1000
      //var a =10  报错
      ////a:=10  报错
      //fmt.Println(a)

    //强类型语言,类型是固定的,一旦定义不能修改
      //var a =10
      //a=100
      //b:="lqz"
      //a=b  报错
      //fmt.Println(a)
      //fmt.Println(b)

    //定义不赋初值  :int 类型默认值是0   string 类型默认值是空字符串  bool默认值为false
      //var a int
     //var b string
      //fmt.Println(a,b)

    //同时定义多个变量
      //var a,b int
      //var a,b int=10,20

      //var a,b=10,20
      //var a,b=10,"lqz"

      //a,b:=10,20
      //a,b:=10,"lqz"
 
    //fmt.Println(a)
    //fmt.Println(b)
    var (
        name   = "naveen"
        age    = 29
        height int
    )
    fmt.Println(name)
    fmt.Println(age)
    fmt.Println(height)

}

5.数据类型

//变量类型
package main

func main() {
    //bool类型 0值是false
            //var b bool =true
            //var b =true
            //b:=true
            //var b bool
            //fmt.Println(b

    //数字类型
            /*
            int类型:表示整数,int8   int16  int32  int64  (直接用int就行了,别人用什么要认识)
            uint类型:表示正整数,无符号类型 uint8 uint16...
              32位无符号整数 ,其表示范围是2的32次方,最大整数为 2的32次方-1
              有符号数则要去除一个符号位,正数最大为2的31次方-1 , 负数最小为负  2的31次方
              在32位机器上int 就是int32 ,在64位机器上int就是int64
            float类型:表示小数,只有float32和float64
            
       complex64类型:复数,不用考虑 byte: uint8的别名 rune:int32的别名
*/ //var a int=-10 //fmt.Println(a) //var a int8 =100000 //fmt.Println(a) 超出范围,报错 //var a uint8=100 //fmt.Println(a) //var a float32=2.33 //fmt.Println(a) //字符串(必须用双引号) //b:=\'a\' //fmt.Printf("%T",b) 单引号示范(不要用),会打印出类型,发现变成整形了 //反引号带换行,等同于python中的三引号   // var c string=`阿斯蒂芬a    //手动阀afd阿斯蒂芬   //asfd阿萨德f` 反引号示范,空格也占位,输入什么输出什么
       // 双引号不带换行,输出结果为一整行,不要考虑单引号,就当没有   //var a string="阿发" +   // "按时发大水f" +   // "agessdfas" +   // "按时发大水发d" //双引号示范,输出一整行 //fmt.Println(a) }

6.常量

//常量:恒定不变的量 用于ip 端口什么的
package main

import "fmt"

func main() {

    //定义了一个常量a
    //const a int=10
    const a =10
    //a=100  报错 ,不能改
    fmt.Println(a)
    const b ="192.168.1.1"

}

 7.函数

//函数
package main

//func main() {

//无参数,无返回值
        //test()

//有两个int类型的参数
    //test(1,2)

    //var a int=test(1,2)  // 接收并打印,这种参数必须为int,下方函数中改变后报错
    //var a =test(1,2)
    //a,b:=test(1,2)  //推荐这一种写法

    //var a string =test(1,2)
    //fmt.Println(a)


    //a,b:=test(1,2)
    //不要第二个返回值, _表示不要
    //a,_:=test(1,2)
    //fmt.Println(a)

    //fmt.Printf(_)
    //a:=test()
    //fmt.Printf(a)
    //test(a=10,b=21)
    //fmt.Println(1,"lqz")
    //test(1,"lqz")

//}

//函数定义,语法
//func关键字 函数名(参数1 类型,参数2 类型) (返回值类型){}

//无参数,无返回值
        //func test()  {
        //    fmt.Println("xxx")
        //}
                //test()   // main中传值

//有两个int类型的参数
        //func test(a int,b int)  {
        //    fmt.Println(a+b)
            //}

        //func test(a ,b int)  {
        //    fmt.Println(a+b)
        //}

        //func test(a ,b int,c string)  {
        //    fmt.Println(a+b,c)
        //}

                //test(1,2)  // main中传值

//有一个数字类型返回值,一定要指定返回值类型
        //func test(a,b int) int {
        //    return a+b
        //}
        //func test(a,b int) string {
        //    return "lqz"
        //}

//返回多个值
        //func test(a,b int) (int,string)  {
        //    return a+b,"成功"
        //}

//命名返回值
        //func test(a,b int) (c int, d string)  {
        //    c=10
        //    d="成功"
        //    return  //上面指定返回值类型时已经指明返回值了
        //}

//在go中没有位置参数和关键字参数,都是位置参数,也没有默认参数
        //func test(a,b int) int {
        //    return a+b
        //}

//不定长参数
        //空接口类型,可以接受传入的任何类型,也可以放具体类型比如int,则只能传入int
        //func test(a ...interface{})  {
        //    fmt.Println(a)
        //
        //}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
两年Java,去字节跳动写Python和Go发布时间:2022-07-10
下一篇:
V语言横空出世,C/C++/Java/Python/Go地位不保 - vlangdev发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap