首页 > 其他 > 详细

Go初识

时间:2020-09-22 17:51:05      阅读:55      评论:0      收藏:0      [点我收藏+]

初识

简介

Go 是一门开放源码的编译型编程语言,可容易的构建简单、可靠和高效的软件

历史

Go 语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年开始设计,利用 20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开源)首次公开发布,于 2012 年正式发布。

创造

开发者使用编程语言的三大分类(执行速度、简易程度、开发难度):

执行速度快、编译速度慢(编译型):C,C++

执行速度较慢、编译速度快(解释型): JAVA,.NET

执行速度慢、开发难度小(动态脚本):Python,PHP

Go 语言在 3 个条件做了平衡:易于开发、快速编译、高效执行

特性

Go 语言被称为 21 世纪的 C 语言,Go 从其他开发语言的借鉴了许多优秀的设计思想,例如从C 语言借鉴表达式、流程控制、基础数据类型、参数传递、指针等,从 Oberon-2 语言借鉴的包的导入和声明等,从 Oberon 语言借鉴的面向对象特性中方法的声明语法,从Limbo 语言中借鉴的 CSP(通信顺序进程, communicating sequential processes),从 APL 语言借鉴的 iota 语法,从 Scheme 语言借鉴的作用域和嵌套函数……

? 静态类型并具有丰富的内置类型: bool、byte、rune、int、float、string、array、slice、map

? 函数多返回值

? 错误处理机制:使用 defer、panic、recover 定义标准的错误流程

? 语言层并发:使用关键字go将函数以Goroutine方式运行,使用CSP模型作为Goroutine的通信方式

? 面向对象:使用类型、组合、接口来实现面向对象思想

? 反射

? CGO:用于调用 C 语言实现的模块

? 自动垃圾回收

? 静态编译

? 交叉编译

? 易于部署

? 基于 BSD 协议完全开放

应用

Go 语言主要用于服务端开发,其定位是开发大型软件,常用于:

? 服务器编程:日志处理、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等 

? 网络编程:Web 应用、API 应用、下载应用

? 内存数据库

? 云平台

? 机器学习

? 区块链

? ……

使用 Go 开发的项目列表:https://github.com/golang/go/wiki/Projects

? Go 

? docker

? kubernetes

? lantern

? etcd

? Prometheus

? Influxdb

? Consul

? nsq

? beego

? ……

使用 Go 开发的组织:http://go-lang.cat-v.org/organizations-using-go

? 国外:Google、CloudFlare……

? 国内:阿里、腾讯、百度、京东、爱奇艺、小米、今日头条、滴滴、美团、饿了么、360、七牛、B 站、盛大、搜狗……

环境准备

安装

Golang程序下载地址:

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

具体安装步骤省略

比如go1.14.9.windows-amd64.msi安装成功后

配置一下国内代理,这里选用七牛云的

go env -w GOPROXY=https://goproxy.cn,direct

GOPROXY配置国内代理后,即可下载相关插件

验证

命令行窗口

go env 命令验证

第一个程序

helloWorld.go

package	main	// 声明包名main
//Go 源文件开头必须使用 package 声明代码所属包,包是 Go 代码分发的最基本单位。若程序需要运行包名必须为 main。

import	"fmt"	//导入fmt包
//import 用于导入程序依赖的所有的包

func main() {	//func 用于定义函数。main 函数是程序的入口,若程序需要运行必须声明 main 函数,main函数无参数也无返回值
    fmt.Println("Hello World")	//调用fmt包的Prinln控制台打印Hello World字符串
}

运行程序

go build helloWorld.go	//用于编译&链接程序或包
helloWorld.exe	//执行编译后的可执行程序

Go基本命令

常用参数:
	-x: 打印编译过程执行的命令,并完成编译或运行
	-n: 只打印编译过程执行命令
	-work:打印编译过程的临时目录
	-o: 指定编译结果文件

go build: 用于编译&链接程序或包
go build -work -x -o helloworld.exe main.go

go run:用于直接运行程序
go run -work -x main.go

go clean:清除编译文件

基础语法

标识符

标识符是编程时所使用的名字,用于给变量、常量、函数、类型、接口、包名等进行命名,以建立名称和使用之间的关系,Go 语言标识符的命名规则:

	只能由非空字母(Unicode)、数字、下划线(_)组成
	只能以字母或下划线开头
	不能 Go 语言关键字
	避免使用 Go 语言预定义标识符
	建议使用驼峰式
	标识符区分大小写

Go 语言提供一些预先定义的标识符用来表示内置的常量、类型、函数,在自定义标识符时应避免使用:

内置常量:true、false、nil、iota
内置类型:bool、byte、rune、int、int8、int16、int32、int64、uint、uint8、unit16、unit32、unit64、uintptr、float32、float64、complex64、complex128、string、error
内置函数:make、len、cap、new、append、copy、close、delete、complex、real、imag、panic、recover
空白标识符:_

Go 语言定义 25 关键字:

声明:import、package

实体声明和定义:chan、const、func、interface、map、struct、type、var

流程控制:break、case、continue、default、defer、else、fallthrough、for、go、goto、if、range、return、select、switch

字面量

字面量是值的表示方法,常用与对变量/常量进行初始化,主要分为:

标识基础数据类型值的字面量,例如:0, 1.1, true, 3 + 4i, ‘a‘, "我爱中国" 

构造自定义的复合数据类型的类型字面量,例如:type Interval int

用于表示符合数据类型值的复合字面量,用来构造 array、slice、map、struct 的值,例如:{1, 2, 3}

分割符

小括号()

中括号[]

大括号()

分号;

逗号,

声明

声明变量的 var

声明常量的 const

声明函数的 func

声明类型的 type

问题追踪和调试

Go语言所提供的是尽量简单的语法和尽量完善的库,以尽可能降低问题的发生概率。当然,问题还是会发生的,这时需要用到问题追踪和调试技能。这里我们简单介绍下最常规的问题跟踪方法之一:打印日志

打印日志
package	main	

import	"fmt"	

func main() {	
    fval := 110.48 
    ival := 200 
    sval := "This is a string. " 
    fmt.Println("The value of fval is", fval) 
    fmt.Printf("fval=%f, ival=%d, sval=%s\n", fval, ival, sval) 
    fmt.Printf("fval=%v, ival=%v, sval=%v\n", fval, ival, sval)
}

//结果
The value of fval is 100.48 
fval=100.48, ival=200, sval=This is a string. 
fval=100.48, ival=200, sval=This is a string. 

fmt包的这一系列格式化打印函数使用起来非常方便,但在正式开始用Go开发服务器系统时,我们就不能只依赖fmt包了,而是需要设计严格的日志规范。Go语言的log包提供了基础的日志功能。如果有需要,你也可以引入自己的log模块。

如何寻求帮助

Go语言已经发展了几年时间,凭借着语言本身的优越品质和Google的强大号召力,在推出正式版本之前就已经拥有了广大的爱好者和社区,本节就介绍一些不错的Go语言社区。在遇到问题时,请随时访问这些社区,并勇敢地提问,相信你能得到满意的解决方法。

Go初识

原文:https://www.cnblogs.com/Otiger/p/13713055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!