Go 语言入门指南(一) | 青训营

52 阅读3分钟

Go语言特点

  • 高性能、高并发
  • 语法简单、学习曲线平缓
  • 丰富的标准库
  • 完善的工具链
  • 静态链接
  • 快速编译
  • 跨平台
  • 垃圾回收

字节 Google 腾讯 facebook 美团 七牛云 滴滴 b站 百度 PingCAP 都使用Go语言

优势

  • 可以直接编译成机器码,不依赖其他库
  • 天生支持并发
  • 支持垃圾回收
  • 静态语言但是有动态语言的感觉开发效率高
  • 丰富的标准库

适合服务器编程、分布式系统、网络编程、内存数据库、云平台

golang下载

studygolang.com/dl

中文文档

studygolang.com/pkgdoc

Hello World

package main
​
import "fmt"func main() {
    fmt.Println("Hello World")
}

go有且仅有一个入口函数,main

go语言以包作为管理单位 每个文件必须先声明包 ,任何一个 .go 文件都要保含在一个包中,包名并不要求是所在的文件夹名。程序必须有一个main包

Println()会自动换行

fmt.Println("a = ",a,"b=",b) //一段一段处理,自动加换行

fmt.Printf("a= %d\n",a)//格式化输出 %c以字符方式打印 %d以整型方式打印

函数名 和 左括号{ 必须放在同一行

go语言语句结尾没有分号

导入包必须使用,变量声明了必须使用

go run xxx.go 不生成可执行文件,直接运行

go build xxx.go 编译go代码,生成可执行文件 xxx 运行

如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上运行。

数据类型

好多好复杂,以后再仔细看吧

基本数据类型:数值型(整型 浮点型) 字符型 布尔型 字符串型

bool 布尔类型 1字节

byte 字节 1 uint8别名

rune 字符 4 专用于存储unicode编码,等价于uint32

int,uint 整型 4或8

int8,uint8 1

int16,uint16 2

uint32,uint32 4

int64,uint64 8

float32 浮点型 4

float64 8

complex64 复数 8

complex128 16

unipter 整型 4或8 足以存储指针的uint32或uint64整数

string 字符串

复杂数据类型 指针 数组 结构体 管道 函数 切片 接口 map

命名规范

  • 字母,下划线,数字组成
  • 不能数字开头
  • 不能是关键字
  • 区分大小写

float64存储小数比float32准确

浮点数字面量被自动类型推导为float64类型

复数类型在计算机中使用两个浮点数表示

len() 字符串长度

字符 单引号 往往只有一个字符,除了转义字符

字符串有一个或多个字符组成,隐藏一个结束符 '\0'

str[0]操作字符串从0开始

real()实部 imag()虚部

变量

同一个{}里,声明的变量名是唯一的

自动推导类型 a=true

初始化

var b,c int = 1,2

a, b := 10,20

声明

var 变量名 类型

赋值

变量名=值

自动推导类型

先声明,再赋值

变量名 := 值

变量在定义时没有明确的初始化时会被赋值为零值

零值

  • 数值类型为0
  • 布尔类型为false
  • 字符串为""(空字符串)

多重赋值

变量1,,变量2,.. :=值1,值2,.. /可以给多个变量一起赋值

i, j=j, i //使用多重赋值将i,j值交换 原理是将两个被赋值的变量的值都存储在临时变量里,然后再用临时变量去赋值

_ 匿名变量

丢弃数据不处理

go函数可以返回多个值

func test(){ a, b, c int}

_, d, _=test()

常量

var改成const

常量声明必须显式赋值

不能用 :=

const a int =10

const a=10

批量声明

const (

A = 'A'

B = 'B')

iota

常量计数器

iota作用于itoa使用前的最近的const,如果itoa后续后又出现const,则会重置

const AA = iota // 针对当前const 行索引为0
const (
        O = iota // 0
        P // 1
        Q // 2
    )

太难了,感觉go语法好混乱,不过应该还是因为我太笨了,继续学吧。