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

文思li · · 5934 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

               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

未完,待续......


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:文思li

查看原文:Go语言核心编程(临时发布版)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5934 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传