• DAY 97 go01


    1 Go语言介绍

    # Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言
    # 缺点:
    不是特别友好的设计:异常处理,错误处理,没有泛型,不是完全的面向对象
    # 优点:
    语法简洁,性能高,对并发支持好(内置线程和协程池),跨平台编译
    # python 1989年,java 1990

    # c,go,python,java,js
    -c,go,java:编译型---》编译过程
      -c---》编译后(在不同平台编译)----》可执行文件
      -go---》编译后---》可执行文件(跨平台编译)
           -java--》编译后--》字节码文件(.class,jar,war)--》运行在jvm之上
           -java:es,mycat:java写的,需要在不同平台安装该平台的jdk
          -jdk:java开发环境,jdk包含了jre和jvm java8以上
               -jre:java运行环境,
               -jvm:java虚拟机
               -javase:java基础,文件,并发。。。
               -javaee:java web开发
               -javame:手机开发(废弃了)
               -java是sun公司,后来被甲骨文收购了,收费
              -openjdk
                   -oraclejdk
               
       -python,js:解释型
      -python 解释器之上---》(源码保密)打包成exe,第三方模块混淆,做到docker容器中
           -天然跨平台
           
           
    # go的特性
    跨平台的编译型语言
    语法接近C语言
    管道(channel),切片(slice),并发(routine)
    有垃圾回收的机制
    支持面向对象和面向过程的编程模式
    # go发展
    go1.5 以后自举,自己写自己
    go 1.14 Go Module 包管理(go.mod文件)

    最新:go 1.16

    #Go语言应用
    基本上所有的互联网公司都在用
    b站:主站

    # go语言的火
    -性能高,语法简洁
       -docker,k8s火
       -区块链(第一款开源的区块链用go写的)
       

    2 开发环境搭建

    # python--->python解释器  3.10
    # java----》jdk         java 15  
    # go----》sdk(分平台)   1.16

    # go windows的sdk:go1.16.5.windows-amd64.msi
    # 安装(sdk)
    一路下一步
       go version # 查看版本
       
    # 安装ide(集成开发环境)
    -Jetbrains公司的全家桶(注册码通用)
      -idea
           -pycharm
           -goland
           -webstorm
           -datagrip
       -vscode:微软出的(免费)
       -安卓开发:谷歌公司买了Jetbrains的授权,改了
       -goland一路下一步
    # 永久免费试用
    -IDE Eval Reset,具体操作可以参照百度

    # go env   查看go的环境变量
    -GOPATH=C:Usersoldboygo  # 如果不使用MODULE模式,所有的go代码必须放在这个路径下的src文件夹下
       -GOROOT=C:Program FilesGo # go的安装路径,如果这个路径有问题,内置模块用不了
    -GO111MODULE=auto # 如果开启了module模式,代码可以放在任意路径下,但是项目路径下有一个go.mod的文件

       
    # go get 包的路径及名字     下载第三方包
    -go语言没有一个统一的包管理平台,大家都把包放在github上
       -go get github.com/go-sql-driver/mysql
      -如果没有使用go modul,下载完,源码会被放在GOPATH的src路径下
           -如果使用了go module模式,下载完,在go.mod文件中会有一条记录,这个项目依赖的这个包版本

     

    3 第一个helloworld

    // go文件必须声明包名,这个文件属于哪个包
    package main   //s1.go这个文件属于main包
    import "fmt"   //goland自动帮你导入,导入fmt包

    //声明了一个main函数,
    //go语言中整个程序的入口是main包下的main函数
    func main() {
    //函数体内容
    fmt.Println("hello world")  //在控制台输出helloworld
    }


    //执行go代码----》编译(go build s1.go)---》可执行文件(执行)
    //开发阶段,go run s1.go 编译并执行
    //在编辑器中,直接右键运行即可

     

    4 命名规范

    // 变量定义规范
    1 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
    2 大写字母和小写字母是不同的:Name和name是两个不同的变量
    3 关键字和保留字都不建议用作变量名

    // 25个关键字
    break      default       func     interface   select
    case       defer         go       map         struct
    chan       else          goto     package     switch
    const      fallthrough   if       range       type
    continue   for           import   return      var

    // 37个保留字
    内建常量: true false iota nil
    内建类型:  int int8 int16 int32 int64
             uint uint8 uint16 uint32 uint64 uintptr
             float32 float64 complex128 complex64
             bool byte rune string error
    内建函数: make len cap new append copy close delete
             complex real imag
             panic recover


    //注意点:
    -变量名字大小写有特殊函数,推荐变量命名用驼峰
    -go文件名字推荐用下划线

     

    5 变量

    package main

    import "fmt"

    func main() {
    //1 变量定义方式一(最完整方式)
    //var 变量名 变量类型 = 变量值
    //var a int=10   //在go中,变量定义不适用,报错,编译不通过
    //fmt.Println(a)

    //2 变量先声明,再赋值
    //var a int
    //a=100
    ////a="ssss"  //报错,类型是固定的
    //fmt.Println(a)

    //3 变量的类型推导
    //var a =10  //虽然是推导的,但是类型固定了,就是int类型
    //var b="lqz"
    ////a="dsafsdf"  //也报错
    //fmt.Println(a)
    //fmt.Println(b)

    //4 简略声明
    //a := 10 // :=  是一起的
    //fmt.Println(a)
    //fmt.Printf("%T", a) //打印a的类型

    //5 三种变量定义方式的区别:最完整方式可以先定义再赋值,后面定义和赋值要一起
    //var a1
    //a1=100
    //a2:
    //a2=1000

    //6 变量不能重复定义
    //var a int=100
    ////var a=99
    //b,a:=500,200  //这个a 是赋值
    //fmt.Println(a)
    //fmt.Println(b)

    //7 同时定义多个变量
    //var a,b,c int=10,20,30  //完整定义方法
    //fmt.Println(a)
    //fmt.Println(b)
    //fmt.Println(c)

    //var a,b,c =10,"lqz",99
    ////fmt.Println(a,b,c)
    //fmt.Print(a)
    //fmt.Print(b)
    //fmt.Print(c)
    //fmt.Printf("我的类型是:%T",b)  //string

    //a,b,c:=10,"lqz",99
    //fmt.Println(a,b,c)

    //8 同时定义多个变量的其他写法  int类型的默认值是0  (了解)
    var (
    name   = "naveen"
    age   int = 29
    height int
    )
    fmt.Println(name,age,height)



    }

     

    6 类型

    package main

    import "fmt"

    /********** 基本变量类型
    //java: byte short int long float double
    数字:
    整形:有符号整形
    int: 在32位机器表示int32,在64位机器表示int64
    int8:用一个字节表示整数范围,   2的7次方-1   分正负,有0
    int16:用2个字节表示整数范围   2的15次方-1
    int32
    int64
    无符号整形(正整数)
    uint
    uint8:用一个字节表示整数范围,   2的8次方-1   有0
    uint16:用2个字节表示整数范围   2的16次方-1
    uint32
    uint64
    小数:浮点数(表示精度不一样)
    float32
    float64

    复数类型(实部和虚部)complex64, complex128


    byte uint8 的别名。
    rune int32 的别名。


    字符串:用双引号包裹的,反引号包裹,可以换行,单引号的不是字符串


    布尔 true false
    var b bool =true
    */

    func main() {
    // 整数类型
    //var a int8= -128
    //fmt.Println(a)
    //var b uint8 = 255
    //fmt.Println(b)

    //var c float32=9.9999
    //fmt.Println(c)

    //var d complex64=7+8i
    //fmt.Println(d)

    //var s string="lqz"
    //fmt.Printf("%T,值是:%v",s,s)

    //var s1 ='l'   // int32,不是字符串
    // var s2=`lqz
    //   啊手动阀
    //暗室逢灯
    //   暗室逢灯`    //也表示字符串,跟双引号的区别在,可以换行
    //   s3:="asdfa" +
    //   "asdfa " +
    //   "asdf" +
    //   "asdf" +
    //   "asdf"
    // fmt.Printf("%T,值是:%v",s2,s2)
    // fmt.Printf("%T,值是:%v",s3,s3)

    var b bool =true
    var b2 bool =false
    fmt.Println(b)
    fmt.Println(b2)
    }

     

    7 常量

    package main

    import (
    "fmt"
    )

    /* 常量:只赋值一次,以后不能修改,配置文件用常量
    const 常量名 常量类型 = 常量值
    */
    const name string="lqz"

    func main() {
    //var name string="egon"
    //fmt.Println(name)
    //name="lqz"
    ////name="egon" //不能修改、
    //const age uint8= 19
    //fmt.Println(age)


    var a =5
    //fmt.Println(a)
    fmt.Println(&a)
    a=99
    fmt.Println(&a)

    }
  • 相关阅读:
    [转]在滴滴和头条干了 2 年后端开发,太真实…
    美团DB数据同步到数据仓库的架构与实践学习
    趣头条实时平台架构
    Spark Web UI 监控详解
    前端框架Vue入门
    Spark on Yarn详解
    Spark原理及关键技术点
    Flink应用程序结构开发介绍
    如何进行Flink项目构建,快速开发Flink应用程序?
    机器学习基础
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14894207.html
Copyright © 2020-2023  润新知