美文网首页Go
Go语言核心编程(临时发布版)

Go语言核心编程(临时发布版)

作者: 文思li | 来源:发表于2018-10-08 17:51 被阅读495次

                   Go语言核心编程

                                     原创者:文思   

                  

    一、认识Go语言

    1、Go简介及应用场景

    Go语言,我们可以简单的写成Golang,是Google公司创造和主推的。

    Go可以做什么?区块链开发、Go服务端开发、Golang分布式/云计算

    Go的优势:处理大并发、处理数据、计算能力

    Go目前的应用领域:区块链应用、后端服务应用支撑(排序、推荐、搜索、按条件分流等)、云计算/云服务(盛大云计算:CND调度|分发系统|监控系统|短域名服务、京东消息推送云服务及京东分布式文件系统后端全部用go实现)

    2、Golang的学习方法

    高效;先建立整体框架,然后细节;先know how再know why;多琢磨别人怎么做;总结学习经验;后期注重技术基础及细节原理的认识

    Go语言的吉祥物,金花鼠

    3、Go语言小故事

    为何要创造Go语言?

    发展历程:

    2007年原型

    2009年开源发布

    2015年1.5版本中移除了最后的残余的C代码

    2017年2月17日1.8版本

    2017年8月24日1.9版本,1.9.2版本

    2018年2月16日1.10版本

    4、Go语言特点:

    (1)  Go=C+Python,兼顾运行速度与动态语言的快速开发。继承了C的理念,保留了C的编译执行方式,但弱化了指针。

    (2) 引入包的概念,用于组织程序结构,Go语言的每一个文件都要属于一个包,而不能单独存在。

    (3) 垃圾回收机制。内存自动回收,不需要开发人员管理

    (4)  天然并发(重要特点):从语言层面支持并发,实现简单;goroutine轻量级线程,可实现大并处理,高效利用多核;基于CPS并发模型实现。

    (5)  吸收了管道通信机制,形成了Go语言特有的管道Channel,通过管道可以实现不同goroute之间的通信。

    (6) 函数可以返回多个值,且go语句后面不需要写分号(编译器会自动加分号)

    (7) 新的创新:比如切片slice、延时执行defer等。

    5、Go语言的开发工具

    1、visual  studio code (VSCode)运行于主流操作系统智商,默认提供Go语言语法高亮,安装Go语言插件后可以智能提示、编译运行。

    2、Sublime Text可免费试用默认也支持Go语法,但一定次数后提示是否购买。

    3、Vim 是从vi发展出来的,代码补全、编译、错误跳转等方便编程的功能丰富。

    4、Emacs 传说中的神器,不仅是一个编辑器,可称为一个集成运行环境。

    5、Eclipse

    6、LiteIDE 中国人开发专门Go语言开发

    7、JetBrains公司的产品,付费,需要安装Go语言

    建议学习时使用VSCode或vim。一定阶段后工作使用时用Eclipsse等自动化较强的开发工具。

    二、开发实战

    创建一个文件夹gocode,类似java的workspace

    package main//归属到main包下

    import "fmt"//引入fmt包

    func main(){

        fmt.Println("hello")//输出hello

    }

    1、安装开发环境、sdk

    https://www.golangtc.com/download下载sdk然后解压即可:

    配置环境变量:

    GOROOT 指定sdk的安装路径

    Path 添加sdk的/bin目录

    GOPATH 工作目录,以后go项目存放的路径

    例如:

    2、快速入门

    go程序的目录结构

    d:/goproject

      |--src

          |--go code

                              |--project1(项目)

    开始hello,world

    通过go build命令进行编译源文件:go build  heelo.go

    运行hello.exe文件即可:hello.ext

    也可以用go  run编译后直接执行,go run hello.go:

    大家注意,go和java在编译时不同的一点是,go可以指定编译后的文件名称。比如:

    执行流程:

    先编译再执行:类似java,编译后的exe相当于java的class

    使用go  run直接编译执行:底层也是先编译再执行。

    先编译再执行的好处就是可以把exe拷贝到没有go的安装环境下执行

    编译后的exe文件会将依赖的库也编译进来,所以exe会比go文件大很多。

    注意事项:     

    Go应用程序的执行入口是main函数(和java一样)。

    Go语言严格区分大小写。

    Go方法由一条一条语句构成,语句后不需要加分号。

    Go语言一条一条编译,不能把多条语句写在统一行。

    Go语言定义的变量或者import引入的包引入后没有被使用,代码不能编译通过(和java不同)。

    大括号成对出现,缺一不可。

    3、转义字符及注释、规范的编码风格

    \t   制表位

    \n   换行符

    \\   一个\

    \”   一个”

    \r   一个回车

    1)行注释://

    2)块注释:/**/

    编码风格:官方推荐用行注释来注释方法和语句。

    正确的缩进和空白,可以使用键盘进行缩进,也能使用gofmt命令来进行格式化(gofmt –w main.go该指令将格式化后的内容重新写入到文件)。

    运算符两边习惯性各加一个空格。比如:2 + 3

    一行尽量不要超过80个字符,如果超长建议使用换行符

    左侧大括号要写在函数同一行,比如:

    func main{

    }

    4、官方编程指南和标准库API

    https://golang.org/#

    点击tour选择中文,可以看中文版

    Golang的中文网站https://studygolang.com/

    对应api一般都可以在源码下找到

    5、变量

    Golang的变量是有数据类型的。

    1定义变量  2声明变量  3使用变量

    var i int

    i = 10

    变量使用的三种方式:

    1指定变量类型,声明后若不赋值,使用默认值

    2根据值自行判断变量类型

    3省略var,变量名 := 变量值       

    使用变量及一次性声明多个变量,示例:

    packagemain

    import "fmt"

    func main(){

        var i int

        fmt.Println(i)

        var t = 100

        fmt.Println(t)

        a := 1000

        fmt.Println(a)

    //以下是一次性声明多个变量的三种方式

        var n1,n2,n3 int

        fmt.Println(n1,",",n2,",",n3)

        var m1,m2,m3 = 10000,"tom",20000

        fmt.Println(m1,",",m2,",",m3)

        a1,a2,a3 := 100000,"jack",300000

        fmt.Println(a1,",",a2,",",a3)

    }

    运行输出:

    0

    100

    1000

    0, 0 , 0

    10000, tom , 20000

    100000, jack , 300000

    全局变量:在函数外部定义的变量就是全局变量。也可以分开创建声明和使用,也可以一次性声明,示例:

    import "fmt"

    var n1 = 1

    var n2 = 2

    var n3 = 3

    //以下是一次性声明多个全局变量

    var(

        m1 = 11

        m2 = 22

        m3 = 33

    )

    func main(){

        fmt.Println(n1,",",n2,",",n3)

        fmt.Println(m1,",",m2,",",m3)

    }

    运行输出:

    1, 2 , 3

    11, 22 , 33

    局部变量有默认的值,全局变量没有默认值。(这点和java相反)

    看到全局变量没有初始化赋值报错了。      

    6、数据类型

    6.1基本数据类型

    整数类型:int(有符号),int8,int16,int32,int64,uint(无符号),uint8,uint16,uint32,uint64,byte,

    rune(等价于int32用于unicode码)

    浮点型:float32,float64

    字符型:没有专门的字符型,使用byte来保存单个字母字符

    布尔型:bool

    字符串:string(golang将string归属为基本数据类型,这和java不同)

    6.2派生/复杂数据类型

    指针,数组,结构体,管道,函数,切片,接口,map

    6.3整数类型详解:

    int8 有符号,占用1字节,表数范围-128 -

    127

    int16有符号,占用2字节,表数范围-2(15次方) - 2(15次方)-1

    int32有符号,占用4字节,表数范围-2(31次方) - 2(31次方)-1

    int64有符号,占用8字节,表数范围-2(63次方) - 2(63次方)-1

    其具体的大小和系统有关。

    6.4变量使用细节

    Golang默认的整数类型为int类型,Golang程序中整型变量在使用时遵守“保小不保大”的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。

    bit是计算机中最小的存储单位,byte是计算机中最基本的存储单元。1byte = 8 bit

    当我们var t =

    100使用程序自行判断变量类型时,我们怎么知道变量的类型和字节大小呢,可以用fmt的Printf输出:

    packagemain

    import "fmt"

    import "unsafe"

    func main(){

        var t  =100 //t是什么类型

        //fmt.Println()可以用作格式化输出

       fmt.Printf("t的类型 %T",t)

       fmt.Printf("\n")

       fmt.Printf("t占用的字节 %d",unsafe.Sizeof(t))

    }

    挨个import太麻烦,也不专业,可以一次性集中引入,真正开发中的写法都是import集中引入:

    packagemain

    import(

        "fmt"

        "unsafe"

    )

    func main(){

        var t  =100 //t是什么类型

        //fmt.Println()可以用作格式化输出

       fmt.Printf("t的类型 %T",t)

       fmt.Printf("\n")

       fmt.Printf("t占用的字节 %d",unsafe.Sizeof(t))

    }

    运行程序显示:

    t的类型 int

    t占用的字节 8

    未完,待续......

    相关文章

      网友评论

        本文标题:Go语言核心编程(临时发布版)

        本文链接:https://www.haomeiwen.com/subject/oopjaftx.html