golang语言:
数量类型:
基础数据类型:
布尔型:ture\false
数值型:
整型:
有符号:int\int8\int16\int32\int64
没有符号:uint\uint8\byte\uint16\uint32\uint64
uintptr是整型,可以足够保存指针的值得范围,在32平台下为4字节,在64位平台下是8字节
有符号可以存储任何整型
无符号只能存储自然数
位数不同存储的整型数据范围不同
浮点型:float32\float64\complex64\complex128
字符串型:string
golang中没有专门的字符类型,如果要存储单个字符,一般使用byte来保存
go的字符串由字节组成
字符只能被单引号包裹,不能用双引,双引号包裹是字符串
当直接输出type值时,就是输出对应字符的ASCll码值
go语言的字符使用UTF-8编码,英文字母占一个字符,汉字占3个字符
go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值
go语言中字符串是不可变的
派生数据类型:
指针:\&(取地址);*(根据地区取值)
指针地址:
指针类型:ptr :=&v
ptr:用于接受地址变量
ptr的类型就为T,称做T的指针类型,*代表指针
指针取值:
空指针:当一个指针被定义后没有分配到任何变量时,它的值为nil;空指针判断:var a *int fmt.println(a)
数组(array)
结构体(struct)
通道(channel)
切片(slice)
函数(func)
接口(interface)
map
---------golang for
switch 不写条件的时候当if与else运用
go语言的for循环有3种形式,只有其中的一种使用分号
for init; condition; post{}
for condition{}
for{}
init:一般为赋值表达式,给控制变量赋初值
condition:关系表达式或逻辑表达式,循环控制条件
post:一般为赋值表达式,给控制变量增量或减量
----------golang switch case
golang 分支表达式可以是任意类型,不限于常量,可省略break,默认自动终止
Switch也可以用于type检查,switch语句还可以被用于type-switch来判断某个interface变量中实际存储的变量类型
switch x.(type){
case type:
statement(s)
}
----------------go常用操作密令
查看环境设置:go env
查看go版本:go version
设置顶级vendor作为依赖:go env -w GOFLAGS="-mod=vendor" 查看env 是GOFLAGS=-mod=vendor,取消:g o env -w GOFLAGS="-mod=";
指定gomod编译 模式:go build -mod=vendor
go mod download下载模块到本地缓存,缓存路径是$GOPATH/pkg/mod/cache
go mod edit是提供了命令版编辑go.mod的功能,例如go mod edit -fmt go.mod会格式化go.mod
go mod graph把模块之间的依赖图显示出来
go mod init初始化模块(例如把原本dep管理的依赖关系转换过来)
go mod tidy增加缺失的包,移除没用的包
go mod vendor把依赖拷贝到vendor/目录下
go mod verify确认依赖关系
go mod why解释为什么需要包和模块
go build 用于编译源码文件
go run 编译并运行go源文件
go get 获取远程代码包
GOROOT:Go 语言安装根目录的路径,也就是 GO 语言的安装路径。
GOPATH:若干工作区目录的路径。是我们自己定义的工作空间。
GOBIN:GO 程序生成的可执行文件(executable file)的路径。
-----所遇异常的解决办法(可能并非最优解)
“go”不被识别为cmdlet,函数,脚本文件或可操作程序的名称 (解决go安装路径变化导致的问题)
解决方案:$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
问题:no required module provides package mian.go: go.mod file not found in current directory or any parent directory; see 'go help modules'
解决办法:go env -w GO111MODULE=auto