• go语言基础


    ---恢复内容开始---

    一: go 语言的介绍

    1:go的概述

    1 go语言(或 Golang)是Google在 2007 年开发的一种开源编程语言,于2009年11月开源,2012年发布go稳定版
    2 go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”

    2:go的诞生

    1 Robert:曾协助制作Java的HotSport编译器,制作了chrome浏览器的js引擎V8
    2 Rob:google首席科学家,与ken共事多年,创出广泛实用的UTF-8编码
    3 Ken:1966年加入贝尔实验室,1983年图灵奖和美国国家技术奖得主,是Unix的原创者,发明了衍生出C的B语言

    3: go的优势

    1做高并发有巨大的优势
    2开发简单,开发效率堪比python
    3运行效率高,很适合用作中央服务器的系统编程语言
    4是项目转型的首选语言,很多公司在用go重构代码
    5提供了海量并行的支持,很适合处理游戏相关数据

    4:使用go的公司

    1 Google
        https://github.com/kubernetes/kubernetes
    2 Facebook
         https://github.com/facebookgo
    3腾讯
    4百度
    5360开源日志系统
         https://github.com/Qihoo360/poseidon

    5: go语言的应用

    1 服务端开发
    2 分布式系统
    3 网络编程
    4 区块链开发
    5 内存KV数据库,例如boltDB、levelDB
    6 云平台,docker就是用go写的

    6 go语言的特性

    1 语言组织
    所有的高级语言都使用源代码来表达程序,程序的语法格式千差万别,但表达这些语法的
    基本概念大同小异 主要包括
    标识符和关键宇;
      • 变量和常量;
      • 运算符;
      • 表达式;
      • 简单语句
      • 控制结构。
    2 类型系统
    每种高级语言都有自己的类型系统,类型系统的特性主要表现在以下几个方面。
      • 动静特性 动态语言还是静态语言。
      • 类型强弱 强类型还是弱类型
      • 基本数据类型 包括类型及其支持的运算和操作集合
      • 自定义数据类型:包括类型及其支持的运算和操作集合。
    3 抽象特性
      • 函数 是否支持函数、匿名函数、高阶函数、闭包等
      • 面向对象 是否支持面向对象
      • 多态:如何支持多态。
      • 接口 是否支持接口,以及接口实现模式。
    4 元编程特性
      • 泛型 是否支持泛型。
      • 反射 是否支持反射,反射的能力。
    5 运行和跨平台语言特性
    编译模式 是编译成可执行程序,还是编译成中间代码,还是解释器解释执行。
    运行模式 直接由 OS 载运行,还是由虚拟机加载执行。
      • 内存管理:是否支持垃圾回收。
      • 并发支持 是否原生支持并发,还是库支持
      • 交叉编译:是否支持交叉编译。
      • 跨平台支持 是否支持多 平台。
    6 语言软实力特性
      • 库:标准库和第三方库是否丰富、好用、高效。
      • 框架 是否有非常出众的框架
    语言自身兼容性:语言规范是否经常变换,语言新版本向前兼容性
    语言影响力 是否有商业公司支持 社区的活跃’性,是否是著名项目。

    二: go的环境部署

    1:下载sdk

    1 官 网:https://golang.google.cn/
    2 go中文在线文档:https://studygolang.com/pkgdoc

    2: 安装和配置sdk

    1 windows使用.msi一键安装
    2 配置环境变量
          GOROOT,自动的,默认将go安装到C:/go
          GOPATH,自定义的位置,理解为存放go代码的位置

    创建并配置好GOPATH后,GOPATH目录还要创建3个子目

    bin          存放编译后的可执行文件;
    pkg         存放编译后的包文件;
    src          存放项目源文件。

     3 下载安装go 语言开发工具

    .jar文件复制到工具的bin目录下

     

    用记事本打开goland.exe.vmoptions”和“goland.exe.vmoptions”这两个文件,在后面添加破解文件的路径

    l -javaagent:D:ToolsGoLand 2018.3.3inJetbrainsCrack.jar

     

    l 打开开发工具

     

    l 激活码拷进去

    三: go语言的编写

    1 编写go源文件

    package main    //main 可执行程序的包名,所有go的源程序文件头部必须有一个包声明语句,go通过包来管理命名空间
    import "fmt"   //import 引用 个外部包 fmt 可以是标准库的包,也可以是第三方或自定义的包,是标准库fmt 准输入/输出包。
    
    
    func main(){
        fmt.Printf("Hello, world. 你好,世界!
    ")
    }

    2 源代码的特征解读

    • 源程序以.go 后缀
    • 源程序默认为 TF-8 编码。
    • 标识符区分大小写
    • 语句结尾的分号可以省略。
    • 函数 以臼nc 开头 函数体开头的“{”必须在函数头所在行尾部,不能单独起一行。
    • 宇符串字面量使用“ 川(双号|号〉括起来。
    • 调用包里面的方法通过点“ ”访问符,比如 例中的 fmt.Printf
    main 函数所在的包 必须是 main

    注意 :go 语言单行注释 //  多行注释 /*  内容  */

    3 go语言编译运行

    在文件夹下可以看到编译的文件haha.exe

     

    四:  go语言的词法单元

    1 token

    概念:

    token 是构成源程序的基本不可再分割的单元。编译器编译源程序的第一步就是将源程序分
    割为一个个独立的 token ,这个过程就是词法分析。 Go 语言的 token 可以分为关键字、标识
    操作符、分隔符和字面常量等,

    2 go语言token分隔符有两类

    1)操作符

    “?”和“+”既是分隔符,也是 token ,所以这个简单的 句被分割为 token :“ sum ”、

    2)纯分隔符

    其本身不具备任何语法含义,只作为其他 token 的分割功能。包括空格、制
    符、换行符和 回车符 多个相邻的空格或者制表符会被编译器看作分隔符 处理,比如

    3 标识符

    编程语言的标识符用来标识变 、类型 常量等语法对象的符号名称,
    1 开头 个字符 须是字母或下画钱
    2 后面 任意多个字符、数字或下画线
    3 区分大小写

    4 关键字

    编程语言里面的关键字是指语言设计者保留的有特定语法含义的标识符,这些关键宇有自己
    独特的用途和语法含义,它们一般用来控制程序结构,每个关键字都代表不同语义的语法糖

    共语言中的关键字

    1)引导程序的8个关键字

    package // 定义包名的关键字
    import    //导入 名关键字
    con st    //常量声明关键字
    var        //变量声明关键字
    func       //函数定义关键字
    def er     // 延迟执行关键字
    go          //并发语法糖关键字
    return     //函数返回关键字

    2)声明复合结构的4个关键字

    struct     //定义结构类型关键字
    interface //定义接 类型关键字
    map       //声明或创建 map 类型关键字
    ch an     //声明或创建遥远类型关键字

    3)流程控制的13个关键字

    if else //if else 句关键字
    for range break cont nue //fo 循环使用的关键字
    switch select type case default fallthrough //switchselect  语句使用的关键字
    goto      //goto 跳转语句关键字

    5 数据类型

    数值( 16 个)
        整型( 12 个)
            byte int int8 int16 int32 int64 
            uint unint8 uint16 uint32 uint64 uintprt 
        浮点型( 个)
            float32 float64 
        复数型( 个)
            complex64 complex128 
    字符和字符串型( 个)
        string rune 
    接口型( 1个)
        error 
    布尔型( 1个)
        bool     

    内置函数(15) (注:内置函数不需要import引入)

    make new len cap append copy delete panic recover close complex real image Print Println

    常量值标识符(4个)

    true false //true 和false 表示bool 类型的两常量值:具和
    iota      //用在连续的枚举类型的声明
    nil      //指针/引用型的变量的默认值就是 nil

    空白表示符(1)

    _   占位符

    6 操作符

    包括 运算符 显示分割符、其他语法辅助符号

    操作符

     

    7 分隔符

    • 算术运算符( 5个〉
    算术计算顺序是按照优先级从左到右进行的 当然也可以使用括号来改序。
         +  -   *  /  %
    • 位运算符( 个)
    位运算符用于整数的位运算操作
          &   |   ^      & ^   >>   <<
    • 赋值和赋值复核运算符 (l3 个)
        :=   =  +=  -=   *=  /=   %=   &=  |=  ^=^=    >>=   <<=
    • 比较运算符( 6个)
        >   >=   <   <=   ==    != 
    • 括号
        ( ) { } [ ] 
    • 逻辑运算符 (3 个)仅供非商业用途或交流学习使用
        &&   ||   !
    • 自增自减操作符(2 个)
        ++    -- 
        注意: Go 语言 里面自增、自减操作符是语句而不是表达式。
    • 其他运算符( 6个)
      :   ,    ;    .     ...      <-

    8 常量

    • 整型宇面 Cinteger literals) 
    整型字面量使用特定字符序列来表示具体的整型数值,常用于整型变量或常量的初始化。
    
    • 浮点型字面量( loating-point literals) 
    浮点型字面量使用特定字符序列来表示→个浮点数值。它支持两种格式 种是标准的数学记录法,另一种是科学计数法的表示
    
    • 复数类型字面量 Cl ma inary literals) 
    复数类型字面量使用特定的字符序列来表示复数类型的常量值:
    
    • 字符型字面量( Run literals) 
    go的源码采用的是 UTF-8的编码方式, UTF-8 的宇符占用的字节数可以有 1~4个字节,
    
    • 字符串字面量 in Ii terals) 
    字符串字面量的基本表现形式就是使用“”将字符序列包括在内,双引号里面可以是

    9 变量

    变量:使用一个名称来绑定一块内存地址 该内存地址中存放的数据类型由定义变量时指
    定的类型决定,该内存地址里面存放的内容可以改变。

    1) 声明变量

    var varName dataType [ = value] 
        关键宇 var 于变量声明。
        varName 是变量名标
        dataType 数据类型
        value 是变量的初始值,,初始值可以是字面量,也可以是其他变量名 还可以是一个表达式;如果不指定初始值,
        go 的变量声明后会立即为其分空间

    2)短类型声明

    varName := value 
    :=声明只能出现在函数内(包括在方法 内)
    此时 Go 编译器自动进行数据类型推断。

    支持多变量赋值

    a , b := 1,”hello" 
    • 变量名
      变量的命名规则
    • 变量值
      变量实际指向的是地址里存放的值,变量的值具体怎么解析是由变量的类型来决定的。在
      初始化变量值时,我们可以使用字面量,也可以使用其他的变量名。
    • 变量存储和生存期
      Go 语言提供自动内存管理,通常程序员不需要特别关注变 的生存期和存放位置。编译器
      使用枝逃逸技术能够自动为变量分配空间 可能在椅上,也可能在堆上
    • 类型信息
      类型决定了该变量存储的值怎么解析,以及支持哪些操作和运算,不同类型的变量支持的
    操作和运算集是不一样的。
    • 可见性和作用域
      Go 内部使用统一的命名空间对变量进行管理,每个变量都有一个唯 的名字,包名是这个名字的前缀。 

    10 常量

    概述:
        常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义常量时指定
    的类型决定,而且该内存地址里面存放的内容不可以改变

    预声明标识符 iota 用在常量声明中,其初始值为 。一组多个常量同时声明时其值逐行增
    加, ota 可以看作自增的枚举变量,专 门用来初始化常量。

    //类似枚举的 iota
    const ( 
        cO = iota    //cO == 0 
        cl = iota     //  cl == 1 
        c2 = iota    // c2 == 2 
    }
    //简 写模式
    const ( 
        cO = iota    // cO == 0 
        c1               // cl == 1 
        c2               // c2 == 2 
    }
    
    //注意 iota 逐行增加
    const ( 
        a=1<< iota       //a==1   (iota ==0) 
        b=1<< iota       //b==2   (iota==1)
         c=3                 // c==3  (iota== 2,unused)     
        d=1<< iota       // d==8  (iota == 3)
    }
  • 相关阅读:
    Go语言专题
    计算机网络专题
    分布式系统理论专题
    Scala语言专题
    Zookeeper专题
    Java虚拟机专题
    Java并发编程专题
    git使用指南
    Oracle查询今天、昨天、本周、上周、本月、上月数据
    python3 装饰器
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/10800422.html
Copyright © 2020-2023  润新知