GO 介绍和搭建环境 初识变量

内容详细

1 Go语言介绍

        //1  Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言--》很新
            -python:1989年
            -java:1990年
        // Golang和Goland是什么关系?
            -Golang 编程语言
            -Goland jebrains公司出的编辑器,写go代码的,跟pychrm是一个东西
        //2  Go是静态强类型语言,是区别于解析型语言的编译型语言(静态:类型固定 强类型:不同类型不允许直接运算)。
          解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行
          编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行
            python 动态强类型,你定义函数时,如何规定类型
                -强类型:不同类型之间不能直接运行,需要做类型转换,数字+字符串
            java  静态强类型---》有的人说 它不是编译型---》编译成字节码文件
                -数字+字符串 可以---》违背了强类型?---》隐士类型转换---》自动识别并做类型转换,运算
            js  动态弱类型
                -数字+字符串  允许

        // 3 Go语言特性
          跨平台的编译型语言  ---->夸平台   编译 
                -python 夸平台,解释型,解释器有不通平台,代码运行在不同平台
                    -你们给客户开发的程序,部署在客户机器上---》你的代码,客户就能拿到--》泄露代码了
                    -没有特别好的方案:
                            1 直接打包成可执行文件 pipinstall  
                            2 有些第三方代码加密,兼容性很差
                            3 把代码放到docker镜像中-->docker run -e pasword=123 
                                    -从环境变量把password取出来,程序中执行之前先校验这个秘密是否授权,如果没授权,容器不能运行
                            4 把程序运行起来---》硬盘加载到了内存--->直接把源代码删掉---》该运行运行
                -js ---》代码混淆---》正常格式的js---》坨到一起,变量函数名都是魔鬼变量--》压缩
                    -js逆向

                -go 跨平台   编译
                    -可以在不同平台编译出不同平台的可执行文件--->交叉编译

                -c  不夸平台  在不同平台编译
                    -redis--》源码下载---》make & make install 

          语法接近C语言
          管道(channel),切片(slice),并发(routine)
          有垃圾回收的机制 
          支持面向对象和面向过程的编程模式---》面向对象 有类的概念,没有语法


        // 4 版本发展
          2009年11月7日 weekly.2009-11-06 —— 早期的版本
          2012年3月28日 go1 —— 稳定版版的发布
          2015年8月19日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了”最后残余的C代码”---》go早期底层有c写的(java,python),再往上不用了,实现了:【自举】 自己写自己
          2018年8月24日 go1.11 —— modules和WebAssembly支持
            -加入了对 go mod 的支持-->go语言包管理很乱:第三方:vender,mod机制
            -GO111MODULE = off,on ,auto
          2019 年 9 月 go 1.13— — 改进了 sync 包中的 Pool,在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间--->GO111MODULE默认开启
            -别人写的程序---》1.13及以上版本
            - Go Module 已经可以用于生产环境,鼓励所有用户迁移到 Module

          2022年  1.18 版  加入了对【泛型】的支持

        // 5 Go语言应用
            -哪些公司在用
                -Google
                -国内互联网公司,非常喜欢用go,小公司   python---》go
                    -七牛:国内最早做go实践的,国内镜像(豆瓣源--->python写的)
                    -B站:原来主站php 流量---》游戏(80%)--> go替换了---》代码泄露了19年
                        -go 微服务框架 go-kratos
                    -字节:大量的go,Kitex
                    -阿里:大部分java,自研的jvm---》杭州的公司大部分都用java--》阿里离职了创业
                    -腾讯:用
                    -百度:
                    -区块链公司
        // 6 服务开发、并发、分布式、微服务等方向
                -服务端,微服务:抢java市场
                -自动化运维:抢python市场
                -区块链
                -开源的并发高的软件,用go写的

        // 7 Go语言项目
            -k8s
            -docker
            -普罗米修斯---》运维,监控软件---》zabbix--》php
            -区块链:BTCD 是用go语言实现的完整节点的比特币实现
                    -为什么go在区块链界很火---》完整的区块链解决方案代码第一款go开源了
                    -拿着人家开源的改改名字,二次开发---》做自己的币--》工作给的高
            -etcd ,consul。。


        // 8 运维工具
            -jumpserver:跳板机,堡垒机 python
            -ansible  :python写的,基于ssh自动化运维工具,远程操作几百台机器,python
            -Jenkins  :java写的 
            -salstack :python写的,跟ansible一个类型产品
            -zabbix :监控软件php写的
            -普罗米修斯-go写的

        // 9 Go语架构
        GOPATH的工作区包含bin,src,和pkg这三个:
          src——源码(包含第三方的和自己项目的)
          bin——编译生成的可执行程序
          pkg——编译时生成的对象文件

        //10 go适合做什么
          服务端开发
          分布式系统,微服务
          网络编程
          区块链开发
          内存KV数据库,例如boltDB、levelDB
          云平台
        // 11 发展前景
          Go语言将登上语言榜前列,与python和Java并列前三甲  ---》10名开外
          Go语言称霸云计算
          Go将统治下一个10年
          目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。

          Go语言简单易学,天生支持并发,完美契合当下高并发的互联网生态

2 Go语言环境搭建

        // 开发go语言--->go sdk---》os,文件处理,网络 包---》1.18版本
        // 运行go ,什么都不需要,就是可执行文件


        // 开发python---》python 解释器--》os,网络模块
            -https://golang.google.cn/dl/
            -一路下一步安装--》已经把安装路径加入到环境变量了--》gopath的bin路径加入到啊环境变量了
            -环境变量
                -
        // 运行python---》解释器

        // 快速开发go语言,需要编辑器 
            -python 用pycharm,数据分析:Anconda:jupyter,vscode
            -个人推荐用goland---》收费---》jetbrains公司--》pycharm同出一系
                -之前的使用习惯完全一样,换了个语法写
            -vscode---》写项目还是goland--》免费
            -下载:https://www.jetbrains.com/go/download/other.html
            -一路下一步:试用30天,永久试用-->pycharm同理

        // 验证是否安装成功
            go -version
        // 命令
            go env  // 查看go的环境变量  goroot:go-sdk安装路径,gopath:一般把代码放在里面
            -GOPATH=C:\Users\liuqingzheng\go // go 代码存放路径
            -GOROOT=C:\Program Files\Go    // go sdk路径
            -GO111MODULE=on    // 是否开启mod模式
            -GOHOSTARCH=amd64
            -GOHOSTOS=windows   // 默认编译代码是win平台
            - GOPROXY=https://goproxy.cn,direct   // 下载第三方模块:github和谷歌--》国内镜像 七牛云

3 第一个helloworld

        package main   // 每个go文件的第一行,都要写这个,声明该文件属于哪个包,main包

        import "fmt"   // 导入内置标准库中的fmt包--》想python--》 import os



        func main() {  // 写一个main函数,它是整个项目的入口
            fmt.Println("helloworld") // fmt包下的Println函数,会打印到控制台

        }

        // go 程序要运行,必须有入口,入口是main包下的main函数第一行开始执行,区分python
        // python中 __main__,python为了像其他编译型语言一样有个入口

        // 命令
            go build  go文件  // 把源代码编译成可执行文件--》默认平台--》可以交叉编译
            编译成可执行文件,直接执行即可

            go run go文件   // 程序员用,编译并执行,生成一个可执行文件,这个可执行文件不在当前目录下,执行完就删除了,但是它有编译的过程(每次改了代码运行,都要重新编译)

        // goland中,直接右键run运行,就是编译并运行  vscode中没有右键,只能敲命令来做


        //a... 解释
            -实际上,没有a...,但是在goland中,编辑器给你自动提示的,你要传什么参数(编译型语言独有),参数类型是什么,vscode就没有

4 变量的定义和使用

        package main

        import "fmt"

        // 变量的使用 ---》先定义在使用
        func main() {
            // 1 变量的定义 方式一:完整定义
            //var 变量名 变量类型 = 变量值     定义并赋初值
            //var name string ="lqz"  // 定义了一个字符串类型name变量,值为lqz
            //fmt.Println(name)

            //2 变量定义方式二 类型推导,虽然是类型推导,但是在定义阶段类型就固定了,后期不能改
            //var 变量名  = 变量值     // 自动推到出变量是string类型
            //var name ="lqz"
            //var age =19
            ////var age int =99  // 一旦定义过,就不能再定义了
            //fmt.Println(name)
            //fmt.Println(age)
            ////name="彭于晏"  // 修改变量的值
            ////name=19  // 修改变量的值,类型固定,不能改
            //fmt.Println(name)

            // 3 变量定义方式三  简略声明   := 表示定义并赋初值   用的多,但是不代表它没有类型
            // 变量名 :=变量值
            //name :="lqz"
            ////name :="pyy"  // 重复定义
            //fmt.Println(name)

            // 4 以后见到其他的变量定义方式,都是这三种的变形

            // 5 同时定义多个变量---》第二种类型推到
            // 5.1 这三个变量通过类型推导获得
            //var  name,age,hobby ="lqz",19,"篮球"
            //fmt.Println(name,age,hobby)

            //5.2 表示这三个变量都是string类型  第一种的变形
            //var name,age,hobby string = "lqz","19","篮球"
            //fmt.Println(name,age,hobby)

            //5.3   简略声明的方式
            //name,age,hobby:="lqz",19,"篮球"
            //fmt.Println(name,age,hobby)

            // 5.4 用括号括起来,第一种和第二种的混合,这种用的多,如果变量不赋初值,是没法类型推到
            //var (
            //	name  string = "lqz"
            //	age   int
            //	hobby        = "篮球"
            //	wife string     // 定义没有赋初值
            //
            //)
            //fmt.Println(name, age, hobby,wife)
            //

            // 6 补充:变量不能重复定义,但是可以使用 : 的形式,只要左侧有没定义过的,它算修改值
            var name ="lqz"
            //name:="pyy"   重复定义报错
            name,age:="pyy",19  // 只要左侧有没定义过的变量,这个就不错
            fmt.Println(name,age)

        // python 中所有类型都可以是None---》python一切皆对象(引用)--》地址里没放东西就是None,对着go中是nil,java中null
        }

        /*
        go语言想法设法让你少些代码
        // 单行注释    等同于python   #
        多行注释      等同于python   三引号
        注意点:
            1 变量定义了必须使用,如果不用就报错,编译不通过
            2 变量在定义阶段,类型就固定了,后期不能改
            3 变量不能重复定义 无论用那种方式定义过,都不能再定义了,只能使用
        */

4 变量命名规范

        // 1 命名规范
        Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:
        1 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
        2 大写字母和小写字母是不同的:Name和name是两个不同的变量
        3 关键字和保留字都不建议用作变量名 --->内置函数,包,关键字不能做变量名

        // 2 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
        // 目前你认识的:func,var, package,if,else,break,continue  
        // python 中的  and  or 在go中不是关键字

        // 3 go语言中有37个保留字,主要对应内建的常量、类型和函数-->学了就会了
            //对比 python 的  input,print,可以做变量名,但是不建议
          内建常量: 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


        // 4 注意
            -go变量定义推荐用驼峰   AgeOfPerson    java中也是
            -python中推荐下划线    age_of_person 
            -go大小写有特殊含义
            -go的文件命名推荐用下划线


            -go变量定义推荐用驼峰,go的文件命名推荐用下划线


        -python 变量和py文件都推荐用下划线
        -java  变量和java文件都推荐用驼峰
        -go 变量定义推荐用驼峰,go的文件命名推荐用下划线
posted @ 2022-06-07 16:35  风花雪月*  阅读(64)  评论(0编辑  收藏  举报