23

Golang开发入门(一)

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzUxMTcwOTM4Mg%3D%3D&%3Bmid=2247487256&%3Bidx=1&%3Bsn=8cd1492a2fb8f2cc503153d5df014d39
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

f6ZzaqQ.gif

点击蓝字关注我们

本文转载自开测

GO语言简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Go 2.0版本将支持泛型。

Go环境搭建

1

要搭建Go语言开发环境,我们第一步要下载go的开发工具包

安装包下载地址为:https://golang.org/dl/

如果打不开可以使用这个地址:

https://golang.google.cn/dl/

Jraaqi2.png!web

打开之后根据自己的操作系统下载对应版本的安装包。开发工具包又分为安装版和压缩版,安装版的工具包双击打开会出现安装向导,选择安装的路径,会自动设置好环境变量等信息,用起来比较方便一些。这里选择安装版的工具包进行安装。

2

安装Go

①.双击运行安装文件,然后设置安装目录,点击开始安装就可以了。使用安装版的工具包安装完成后会自动添加好GOPATH的环境变量,如果是使用压缩版安装的需要手动添加GOPATH(刚刚安装的go路径)环境变量,并且在PATH变量中添加;%USERPROFILE%\go\bin。

②.打开终端,输入 go version 命令,显示出当前go的版本就是安装成功了。

③.安装好go环境之后,就可以在命令行使用 go run 命令运行go脚本了。

GO重点语法

1

切片(Slice)

Go 语言切片是对数组的一种抽象

Go 数组的长度是不可以改变的,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

.定义切片

可以声明一个未指定大小的数组来定义切片:var identifier []type,或使用make()函数来创建切片:var slice1 []type = make([]type, len);也可以指定容量,其中capacity为可选参数。make([]T, length,capacity)。

.切片初始化

直接初始化切片,s :=[] int {1,2,3 },[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.其cap=len=3。

初始化切片s,是数组arr的引用,s := arr[startIndex:endIndex],将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片。s := arr[startIndex:] ,默认endIndex时将表示一直到arr的最后一个元素。s:= arr[:endIndex] ,默认startIndex时将表示从arr的第一个元素开始。

.len() 和 cap() 函数

切片是可索引的,并且可以由len() 方法获取长度。由 cap() 方法可以测量切片最长可以达到多少。

.append() 和 copy() 函数

如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。可以使用append()方法向切片中追加元素,使用copy()方法复制切片。

2

指针

Go 语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址。一个指针变量指向了一个值的内存地址。

.我们可以使用一下方式声明一个指针变量:

varvar_name*var-type

var-type 为指针类型,var_name为指针变量名,* 号用于指定变量是作为一个指针。以下是有效的指针 声明:

varip*int        /* 指向整型*/
varfp*float32 /* 指向浮点型 */

.指针使用流程:

首先,定义一个指针变量;然后,为指针变量赋值;赋值之后就可以访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

实例:

func main() {
var a int= 20 /* 声明实际变量 */
varip *int /* 声明指针变量 */
ip = &a /* 指针变量的存储地址 */
fmt.Printf("a 变量的地址是: %x\n", &a )
/* 指针变量的存储地址 */
fmt.Printf("ip变量储存的指针地址: %x\n", ip )
/* 使用指针访问值 */
fmt.Printf("*ip变量的值: %d\n", *ip )
}

. Go 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

查看以下实例:

func main() {
varptr *int
fmt.Printf("ptr的值为 : %x\n", ptr )
}

以上实例输出结果为:

ptr的值为 : 0

3

管道

管道(Channel)是Go语言中比较重要的部分,经常在Go中的并发中使用。

.管道的定义

varchanNamechanElemType,这里ElemType是指此管道所传递的类型。也可以使用make()方法来定义管道,ch := make(chanint, 100),size可以省略

.管道的一些操作

<-操作符可以由管道中读写数据,需要注意,<-操作符是与最左边的chan优先结合的。

向管道中写入一个数据,在此需要注意:向管道中写入数据通常会导致程序阻塞,直到有其他goroutine从这个管道中读取数据。

读取数据时,需要注意:如果管道中没有数据,那么从管道中读取数据会导致程序阻塞,直到有数据。

关闭channel,直接调用close()即可, close(ch)。

判断ch是否关闭可以使用,x, ok := <-ch,判断ok的值,如果是false,则说明已经关闭(关闭的话读取是不会阻塞的)。

.单向管道

var ch1 chan<- float64     // 只能向里面写入float64的数据,不能读取
var ch2 <-chanint // 只能读取int型数据

这里只介绍几种go语言重要的语法,更加详细的知识大家可以参考go语言相关的文档:

https://studygolang.com/resources/26

常用GO web框架

Beego

beego 是一个开源的Go应用HTTP 框架,他可以用来快速开发API、Web以及后端服务等各种应用。是一个完整的MVC框架,有自己的日志库、ORM和Web框架。你不需要再去安装第三方库。它有一个称为Bee Tool的内置工具,用于监视代码更改,并在检测到更改时运行任务

Iris

Iris号称是最快的Go后端web框架。支持http2,完备的MVC 支持。性能非常卓越,在众多web框架中遥遥领先。另外iris提供的api都是极简风格,很容易上手。支持中间件扩展,拥有丰富的中间件生态库。拥有强大的路由功能,可以轻易的构建各种形式的RESTful API,路由分组、静态路由、动态路径参数化、通配符路由等待。还有http错误定义、上下文处理器、身份验证、视图模板、热重启、Websocket支持等 等功能。

Buffalo

Buffalo是一个快速又简单的web框架。当你开始一个新项目时,Buffalo可以为你提供一切——从前端到后端开发。Buffalo不仅仅是一个框架——它也是一个整体的Web开发生态系统,可以让你直接构建应用程序。

另外还有很多Go的开源框架,例如:Goji、Martini、Gin Gonic、Gocraft等,大家可以根据自己的实际应用和不同框架的特性来进行选择。

本次分享主要对Golang的简介,后续 和大家分享 如何 用Golang开发简单网站。

往期精彩回顾

AppleScript 介绍

i6raArj.png!web
b6bMBjv.png!web

360技术公众号

技术干货|一手资讯|精彩活动

扫码关注我们


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK