该文章主要参照菜鸟驿站和go语言中文文档
go简介
go语言(或 Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验。
go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”。
go语言有以下特点:
1.goroutine
具有可增长的分段堆栈。这意味着它们只在需要时才会使用更多内存。
2.goroutine
的启动时间比线程快。
3.goroutine
原生支持利用channel安全地进行通信。
4.goroutine
共享数据结构时无需使用互斥锁。
go适合做什么
- 服务端开发
- 分布式系统,微服务
- 网络编程
- 区块链开发
- 内存KV数据库,例如boltDB、levelDB
- 云平台
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
Go语言简单易学,天生支持并发,完美契合当下高并发的互联网生态。Go语言的岗位需求持续高涨,目前的Go程序员数量少,待遇好。
抓住趋势,要学会做一个领跑者而不是跟随者。
国内Go语言的需求潜力巨大,目前无论是国内大厂还是新兴互联网公司基本上都会有Go语言的岗位需求。
每门语言第一个程序:Hello, World!
package main // 声明 main 包,表明当前是一个可执行程序
import "fmt" // 导入内置 fmt
func main() { // main函数,是程序执行的入口
fmt.Println("Hello, World!") // 在终端打印 Hello World!
}
行分隔符
在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
注释
注释不会被编译,每一个包应该有相关注释。
单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾。如:
// 单行注释
/*
Author by 菜鸟教程
我是多行注释
*/
关键字
Go只有25个关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
Go还有37个保留字
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
Go语言声明
有四种主要声明方式:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。
格式化字符串
Go 语言中使用 fmt.Sprintf 格式化字符串并赋值给新串:
package main
import (
"fmt"
)
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode = "go"
var enddate = "2022-8-25"
var url = "Code=%s&endDate=%s"
var target_url = fmt.Sprintf(url, stockcode, enddate)
fmt.Println(target_url)
}
Go 语言数据类型
Go 语言按类别有以下几种数据类型:
序号 | 类型和描述 |
---|---|
1 | uint8 无符号 8 位整型 (0 到 255) |
2 | uint16 无符号 16 位整型 (0 到 65535) |
3 | uint32 无符号 32 位整型 (0 到 4294967295) |
4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
5 | int8 有符号 8 位整型 (-128 到 127) |
6 | int16 有符号 16 位整型 (-32768 到 32767) |
7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型
序号 | 类型和描述 |
---|---|
1 | float32 IEEE-754 32位浮点型数 |
2 | float64 IEEE-754 64位浮点型数 |
3 | complex64 32 位实数和虚数 |
4 | complex128 64 位实数和虚数 |
以下列出了其他更多的数字类型:
序号 | 类型和描述 |
---|---|
1 | byte 类似 uint8 |
2 | rune 类似 int32 |
3 | uint 32 或 64 位 |
4 | int 与 uint 一样大小 |
5 | uintptr 无符号整型,用于存放一个指针 |
变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字,指定变量类型,如果没有初始化,则变量默认为零值。
var identifier type
可以一次声明多个变量:
var identifier1, identifier2 type
package main
import "fmt"
func main() {
var i int = 13
var f float64
var b bool
var s string = "hello"
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
根据值自行判定变量类型。
package main
import "fmt"
func main() {
var i = 13
var f = 3.66
var b = true
var s = "hello"
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
使用 :=
声明变量
package main
import "fmt"
func main() {
intVal := 1
fmt.Println(intVal)
}
intVal := 1
相等于:
var intVal int
intVal =1
常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式:
const identifier [type] = value
package main
import "fmt"
func main() {
const a = "abc"
const b string = "abc"
fmt.Println(a, b)
}
常量还可以用作枚举:
package main
import "fmt"
func main() {
const (
a = 0
b = "abc"
c = true
)
fmt.Println(a, b, c)
}
iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a, b, c, d, e, f, g, h, i)
}