• Go初识


    简介

    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
    ", fval, ival, sval) 
        fmt.Printf("fval=%v, ival=%v, sval=%v
    ", 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.Printf打印:
    	%T 数据类型
    	%v	自动调用对应的数据类型格式打印
    	%#v	是值的Go语法表示
    

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

    记:Print和Println也可以了解一下

    如何寻求帮助

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

  • 相关阅读:
    TensorFLow手写字识别深度学习网络分析详解
    使用MSBUILD 构建时出错 error MSB3086: 任务未能使用 SdkToolsPath“”或注册表项“XXX”找到“LC.exe”,请确保已设置 SdkToolsPath。
    解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
    SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)
    git push 冲突
    ubuntu快捷键收集
    ubuntu中wine下安装QQ
    ubuntu下安装无线网卡去驱动Qualcomm-Atheros-QCA9377
    spring mvc添加静态资源访问时@Controller无效的解决
    git更新到远程服务器代码
  • 原文地址:https://www.cnblogs.com/Otiger/p/13713055.html
Copyright © 2020-2023  润新知