关键词:
什么是Go?
Go是一门并发支持、垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。
Go的主要特点:
类型安全和内存安全
以非常直观和极低代价的方案实现高并发
高效的垃圾回收机制
快速编译(同时解决C语言中头文件太多的问题)
为多核计算机×××能提升中的方案
UTF-8编码支持
-----
Go存在的价值是什么?
[GO 在谷歌:以软件工程为目的的语言设计请添加链接描述](https://www.oschina.net/translate/go-at-google-language-design-in-the-service-of-software-engineering)
-----
Go命令
在命令行或终端输入go 即可查看所有支持的命令
Go常用命令简介
go env 获取Go环境变量
PS C:\Users\scott> go env
set GOARCH=amd64 #系统类型
set GOBIN=C:\Users\scott\go\bin # 编译后生成的bin目录
set GOCACHE=C:\Users\scott\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\scott\go #Go 开发目录
set GOPROXY=
set GORACE=
set GOROOT=D:\Applications\Go #Go安装目录
set GOTMPDIR=
set GOTOOLDIR=D:\Applications\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:
\Users\scott\AppData\Local\Temp\go-build389094662=/tmp/go-build -gno-record-gcc-switches
go get :获取远程包(需要提前安装git或hg)
go run: 直接运行程序
go build:测试编译, 检查是否有编译错误
go fmt: 格式化源码
go install :编译包文件并编译整个程序
go test:运行测试文件
go doc: 查看文档
-----
第一个程序:
package main
import "fmt"
func main()
fmt.Println("Hello world! 你好,世界!")
-----
Go导入package格式
import "fmt"
import "os"
import "time"
import "io"
或
import (
"fmt"
"os"
"time"
"io"
)
同理
//常量定义
const(
PI = 3.14
const1 = "STRING"
const2 = 2
const3 = 3
)
//全局变量
var(
name = "gopher"
name1 = "1"
name2 = 2
name3 = 3
)
//一般类型声明
type(
newType int
type1 float32
type2 string
type3 byte
)
导入包的别名
import bieming "fmt"
import . "fmt" (前面有一点,代指省略,有这功能,但不建议省用法)
只能导入使用到的包,未使用到的需要用双斜线 // 内容 或 //*-----内容-------*//注释
可见性规则
Go语言中,使用大小写来决定该常量、变量、类型、接口、结构、或函数是否可以被外部包所调用:
根据约定,
函数名首字母小写,即为private 私有 外部无法调用
函数名首字母大写,即为public 公有 外部可以调用
Go基本类型
- 布尔型:bool
- 长度:1字节
- 取值范围: true,false
- 注意事项:不可以用数字代表true或false
- 整型:int/uint
-根据运行平台可能为32或64位
- 8位整型: int8/uint8
-长度:1字节
-取值范围:-128~127/0~255
- 字节型:byte(uint8别名)
- 16位整型:int16/uint16
- 长度:2字节
- 取值范围:-32768~32767/0~65535
- 32位整型:int32(rune)/uint32
- 长度:4字节
- 取值范围:(-2147483648 到 2147483647)
- 64位整型:int64/uint64
- 长度:8字节
- 取值范围:(-9223372036854775808 到 9223372036854775807)
- 浮点型:float32/float64
- 长度:4/8字节
- 小数位:精确到7/15位小数位
类型名称 有无符号 bit数
int8 Yes 8
uint8 No 8
uint16 No 16
int16 Yes 16
int32 Yes 32
int64 Yes 64
uint32 No 32
uint64 No 64
int Yes 等于cpu位数
uint No 等于cpu位数
rune Yes 与 int32 等价
byte No 与 uint8 等价
uintptr No -
- 复数类型:complex64/complex128
- 长度:8/16字节
- 足够保存指针的32位或64位整型:uintptr
- 其他类型:
- array、struct、 string
- 引用类型:
- slice、map、chan
- 接口类型:interface
- 函数类型:func
类型零值:
零值不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值类型默认值为0,bool为false,string为空字符串
变量声明与赋值:
全局变量使用var声明
局部变量(函数体)可以使用下面方式:
var a int = 1
var a,b,c,d = 1, 2, 3, 4
a,b,c,d := 1, 2, 3, 4
go基础并发编程(代码片段)
并发编程并发编程Go并发的设计相关概念启动协程同步通道channel创建channelchannel的读写单方向channel定时器相关资料Go并发的设计 Go语言最大的特色是并发,而且Go的并发并不像线程或进程那样,受CPU核心数的限制,... 查看详情
go并发编程基础-channel(代码片段)
协程(Goroutine)Go语言中没有线程的概念,只有协程,也称为goroutine。相比线程来说,协程更加轻量,一个程序可以随意启动成千上万个goroutine。goroutine被Goruntime所调度,这一点和线程不一样。也就是说,Go语言的并发是由Go自己... 查看详情
go编程基础之四(代码片段)
1.数组Array:---定义数组的格式:var <varName> [n] <type> ,n>=0---数组长度也是类型的一部分,因此具有不同长度的数组为不同类型---注意区分指向数组的指针和指针数组---数组在Go中为值类型---数组之间... 查看详情
go基础函数和面向接口编程(代码片段)
...3.匿名函数4.闭包5.延迟调用defer6.异常处理二、面向接口编程1.接口的基本概念2.接口的使用3.接口的赋值4.接口嵌入5.空接口6.类型断言7.面向接口编程一、函数1.函数的基本形式//函数定义:a,b是形参funcadd(aint,bint) a=a+bvarx... 查看详情
goweb编程实战----go语言的基础语法(代码片段)
目录前言HelloWorld包的声明与导入运行程序方式基础语法注释标识符变量常量运算符前言很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发... 查看详情
goweb编程实战----go语言的基础语法(代码片段)
目录前言HelloWorld包的声明与导入运行程序方式基础语法注释标识符变量常量运算符前言很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发... 查看详情
go-并发编程基础(goroutinechannelselect等)(代码片段)
目录概念协程goroutinegoroutine调度-MPG模式通道Channel数据结构声明&初始化发送与接收遍历和关闭单方向的channelchannel中的channel常见错误time与select超时时间间隔概念并发:指宏观上在一段时间内能同时运行多个程序,微观... 查看详情
云原生时代崛起的编程语言go基础实战(代码片段)
...过多个Go代码示例演示了基础语法的使用,从而具备初级编程能力。@目录概述定义使用场景Go安全使用须知搜索工具Go基础命令标准库基础语法EffectiveGo概览命名规范注释变量常量(const)控制结构数据类型迭代(range)函数指针字符... 查看详情
go基础之文件操作命令行参数序列化并发编程(代码片段)
...(三)之文件操作、命令行参数、序列化、并发编程一、文件操作1.1打开和关闭文件1.2读取文件1.2.1按字节读取:file.Read()1.2.2bufio按行读取文件1.2.3ioutil读取整个文件1.3文件写入1.3.1Write和WriteString1.3.2bufio.NewWriter1.3.3iout... 查看详情
go语言基础入门(代码片段)
...编写与使用多模块工作区总结前言Go是由谷歌支持的开源编程语言,属于编译型语言,对并发编程有较好的支持。官网页面:https://go.dev/或者https://golang.google.cn/主要适合 查看详情
go基础之单元测试反射网络编程操作redis操作mysql(代码片段)
Go基础(四)之单元测试、反射、网络编程、操作Redis、操作MySQL一、单元测试二、反射2.1两个重要函数和类型2.2类型(Type)与种类(Kind)2.3通过反射获取值信息2.3.1从反射值对象获取值2.3.2通过反射访问结... 查看详情
[go语言]基础介绍(代码片段)
Go语言编程环境Windows下直接下载安装包,这里在https://studygolang.com/dl下载到的go1.17.windows-amd64.msi。安装完成之后可以通过goversion查看:PSF:\\Gitee\\go\\Code\\Basic>goversiongoversiongo1.17windows/amd64还可以查看go的基本使用方 查看详情
go基础之程序结构数据类型(代码片段)
...9;3.2.4映射(map)3.2.5结构体一、简介1.1Go语言的介绍Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可... 查看详情
go基础之程序结构数据类型(代码片段)
...9;3.2.4映射(map)3.2.5结构体一、简介1.1Go语言的介绍Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可... 查看详情
go语言基础(代码片段)
...因1计算机硬件技术更新频繁,性能提高很快,目前主流编程语言发展落后,不能合理利用多核CPU优势来提高系统性能2软件设计复杂度高,维护成本大3C/C++编译速度过慢,需要解决提高速度3历史Go是从2007年末由Robertgriesemer,robpik... 查看详情
golang核心编程(代码片段)
文章目录一、基础知识:1.语言简介:1.2语言特性:1.3Go语言特性:2.初识Go程序:3.Go词法单元:3.1token:3.2标识符:3.3操作符和分隔符:3.4字面常量3.5总结:4.变量与常量:4.1变量:4.1.1声明方式:4.1.2变量属性:4.2常量:5.基本数据类型:5.1布尔类型:5.2... 查看详情
go_socket编程(代码片段)
套接字级编程Agenda网络编程的基础方法,将涉及到主机和服务寻址,也会考虑到TCP和UDP如何使用GO的TCP和UDP相关的API来构建服务器和客户端。介绍了原生套接字来实现自己的协议TCP/IP协议栈TCP是一个面向连接的协议,UDP(UserDatagr... 查看详情
go语言并发编程(代码片段)
并发编程基本概念学习并发编程之前我们需要脑补几个基础知识和思考一个问题什么是串行?什么是并行?什么是并发?什么是程序?什么是进程?什么是线程?什么是协程?什么是串行?串行就是按顺序执行,就好比银行只有1个窗口,有3个... 查看详情