zoukankan      html  css  js  c++  java
  • 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语言社区。在遇到问题时,请随时访问这些社区,并勇敢地提问,相信你能得到满意的解决方法。

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/Otiger/p/13713055.html
Copyright © 2011-2022 走看看