基本语法和使用
程序代码架构
- 添加程序入口:package main
- 导入程序所需要的包:import ()
- 定义命令行参数:var mode = flag.Sting (”mode ”,“”,“ process mode ”)
- 初始化函数:func init(){}
- 执行函数/入口函数:func main (){}
变量
-
声明变量
-
标准格式:var 变量名称 变量类型
如:
var a int 整型
var b string 字符串
var c [) float32 浮点贴片
var d func() bool bool类型函数(回掉函数)
var e struct{ 结构体
x int
} - 批量:var ( 变量名称 变量类型 ......)
-
-
初始化
- 变量在声明时,编辑器会自动对于变量进行初始化,如:整型和浮点型默认为0,字符串默认为空字符串,布尔型为bool,其余为nil
- 标准赋值:var 变量名称 变量类型 = value
- 推倒式赋值:var 变量名称 = value (编辑器根据右边的值推倒变量的类型)
- 短变量赋值(推倒式的简明写法): var 变量名称 := value
-
匿名变量
- 在使用多重赋值时,如果不需要在左值中接收变量 可以使用匿名变量。匿名变量用_表示
-
如:函数返回多个值,只需要其中一个或者多个,可以将其余的返回值设置为匿名变量
func GetData() (int ,int) {
return 100 , 200
}
a , : = GetData()
, b : = GetData()
fmt . Println(a , b) -
特点
- 不占用命名空间
- 不分配内存
- 可以多次重复使用
常量
- const key 类型
数据类型
-
整型
- 长度整型:int8,int16,int32,int64
- 无符号整型:uint8,uint16,uint32,uint64
-
浮点型
- float32:最大范围约为 3.4e38
- float64: 最大范围约为 l.8e308
-
字符串
- 使用UTF-8编码
- 单行定义: var str :=" "
- 多行定义:var str :=
-
字符
- byte:表示ACSII,实际为int8
- rune:表示UTF-8类型,实际为int32
-
切片
- 详见容器--切片
- 输出字符类型:fmt.Printf( "%T\n" , a)
指针
-
分类
- 类型指针:允许对这个指针类型的数据进行修改。传递数据使用指针,而无须拷贝
数据。类型指针不能进行偏移和运算。 - 切片:由指向起始元素的原始指针、元素数量和容量组成。
- 类型指针:允许对这个指针类型的数据进行修改。传递数据使用指针,而无须拷贝
-
使用
- &:对变量取地址
- *:对指针取值
- 定义指针变量:var name *类型
- 定义指针变量2: var name= new(变量类型)
字符串的操作
-
长度
- ACSII:len(string)
- UFT-8:utf8.RuneCountinString(string)
-
遍历
- ACSII:for i=0;i<len(string);i++
- UTF-8: for , s := range string
-
截取字符串
- string[start:end]
- 正向搜索:strings.Index(string,' ')
- 反向搜索:strings.LastIndex(string,'')
-
修改
- 将字符串转化为字符串数组:StringBytes : = []byte(string)
- 修改
- 转化为字符串:string(StringBytes)
-
特点
- Go 字符串是不可变的。
- 修改字符串时,可以将字符串转换为[]byte 行修改。
- []byte 和白ing 可以通过强制类型转换互转。
-
拼接
- 方式一:使用+进行链接
-
方式二:使用字节缓存StringBuilder
- 声明字节缓存:var stringBuilder bytes .Buffer
- 将多个字符串依次写进缓存中:stringBuilder . WriteString(string)
- 转化为字符串:stringBuilder String( )
-
方式三:使用join将多个字符串根据分隔符seq进行拼接
- strings.Join(a []string, sep string) string
-
格式化
- 格式:fmt.Sprintf (格式化样式,string1...)
- 格式化样式:“xxxx %d %v”
-
格式化特定替代符
- Xnip2020-09-21_16-26-16.jpg
-
匹配
- 包含字串:strings.Contains(string,substrinig) bool
- 包含字串中的任意字符: strings.ContainsAny(s, chars string) bool
- 不重复的字串个数:strings.Count(s, sep string) int
- 字串第一次出现的位置,不存在为-1:strings.Index(s, sep string) int
- 字串最后一次出现的位置,不存在为-1:strings.LastIndex(s, sep string) int
- 字符出现的第一个位置,不存在为-1:strings.IndexByte(s string, c byte) int
- utf-8字符出现的第一个位置,不存在为-1:strings.IndexRune(s string, r rune) int
- Uft-8出现的最后一个位置:strings.LastIndexAny(s, chars string) int
-
大小写转化
- 大写:strings.ToUpper(s string) string
- 小写:strings.ToLower(s string) string
-
替换
- 将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串
- strings.Replace(s, old, new string, n int) string
-
分割
-
strings.Split(s, sep string) []string
- 如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串
-
strings.SplitN(s, sep string, n int) []string
- 如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。参数n决定返回的切片的数目,小于0返回所有,等于0返回nil,大于0返回切片最多n个子字符串
-
类型别名
- 格式1:type 类型别名 = 类型(该类型可以是变量类型,结构体,函数等)
- 格式2: type 类型别名 类型
有疑问加站长微信联系(非本文作者)