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

               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

未完,待续......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容

  • Go语言数据类型 Go语言本质是用C语言编写的一套高级开发语言, 所以Go语言中的数据类型大部分都是由C语言演变而...
    极客江南阅读 890评论 0 6
  • Golang是我最喜欢的一门语言,它简洁、高效、易学习、开发效率高、还可以编译成机器码… 虽然它一出世,就饱受关注...
    盘木阅读 3,480评论 0 7
  • fmt格式化字符串 格式:%[旗标][宽度][.精度][arg索引]动词旗标有以下几种:+: 对于数值类型总是输出...
    皮皮v阅读 1,071评论 0 3
  • 孙悟空有一个不平凡的成长过程,从美猴王到弼马瘟再到齐天大圣、孙行者,经历了种种磨难,最后成为了斗战胜佛。 在孙...
    llllllHllllll阅读 347评论 0 1
  • 第二十七章 郭国柱家的厨房就紧挨着带有土炕的房间。说是厨房,实际上就是一个自己搭建的简陋的油毡顶棚房,横竖跨,各一...
    姜苏阅读 279评论 0 0