,string
var valString = "contents"
,int
var varInt = 1
,array
,standad(标准)
var array = [arrayLen]type{ele1, ele2, ele3}
arrayLen -- 数组长度【超出报错】
... -- 表示不限制单独
type -- 数组元素类型
ele1 | ele2 | ele3 -- 数组元素
,slice -- 切片
,标准
var slice []type = make([]type, len, cap)
type -- 类型(int,string,float)
len -- 长度【必须】
cap -- 容量【与长度含义不一致】【必须】
attendtion:
int | float32 | float64 类型声明的切片各元素默认为0
string 类型什么的切片各元素为空字符
,简写
slice := make([]type, len, cap)
,切片初始化【直接插入数据】
slice := [] type{element1,element2,element3}
type -- 类型(int,string,float)
element1 | 2 | 3 -- 切片元素
,map - 集合
,standad 【标准】
var map = make(map[keyType]valueType, len)
keyType -- 集合key类型
valueType-- 集合value类型
len -- 初始化长度【当容量不足时会自动扩充】
,map init val
var map = map[keyType]valueType{
"key1":"value",
"key2":"value",
}
,struct -- 机构题
type structName struct{
ele1 type
ele2 type
}
ele1 -- 元素名称
type -- 元素类别
,interface - 接口
type interfaceName interface{
}
Typeof convert
attention:
assignment var type == convert type (赋值变量类型必须等于转换类型)
var varString string = "hellowolrd"
,string => int
var varInt int
varInt = strconv.Atoi(varString )
attnetion :
varString is int num => return int num
varString is not num => return 0 [int]
,string => float64|32
var varFloat float32|64
attention:
varString is float => return int float
varString is not float => return 0 [int]
,int => string
varString = strconv.Itoa(varInt)
,int => float64 | 32
varFloat = float64(varInt)
,float => int
varInt = int(float)
,string => []byte
byteStr := []byte(string)
,[]byte => string
str := string(byteStr)
数据类型初始化
,数值类型:0
,布尔类型:false
,字符串:""【空字符串】
,指针:nil
,整数类型的变量
var a *int
,切片类型的变量
var a []int
,映射变量
var a map[string] int
,整数类型的通道变量
var a chan int
,函数变量
var a func(string
,接口类型
var a error
变量声明
,非常量
,单个
var age int = 1 <=> age := 1
,多个
var name1, name2, name3 = v1, v2, v3 <=>n ame1, name2, name3 := v1,v2,v3
,常量
# 需注意 iota 用法
# 常量只能声明布尔型,数字型【整数型、浮点型和复数】,字符类型
,单个
const MAN int = 1 <=> MAN = 1
,多个
const name1, name2, name3 = v1, v2, v3
,多个,实例2
const (
name1 = 0
name2 = 2
)
,for loop scope support type : array,slice,map,string
get key, value
for key, value := range array{
}
only value
for _, value := range slice{
}
切片(slice)
,初始化
var slice []type = make([]type, len, cap)
<=>
slice := make([]type, len, cap)
,初始化数据声明
slice := [] type(ele1,ele2,ele3)
,get slice data
,get all
allslice := slice[:]
,create a new slice of the elements in arr from the subscript startIndex to endIndex-1.
attention: index start from 0
partSlice = slice[1:3]
,get slice length
len(slice)
,get slice cap
cap(slice)
,adding element to slices
sliceNew := append(slice,1,2,3)
,copy slice
attention:Slices must be created first when copying
newSlice := make([]int, len, cap)
copy(newSlice, slice)
集合(map)
,init map
mapVar := make(map[keyTupe]valueString, Num)
keyTupe -- key 类型
valueString -- value 类型
Num -- map 元素 个数【当map集合中元素超过指定个数时,go会自动扩充】
,init map assignment value
mapVar := map[keyTupe]valueString{
"name":"small pig",
"content":"small lovely dog",
}
,map define different values
var maps = make(map[string]interface{})
maps ["id"] = 1
maps ["name"] = "small-pig"
maps ["flag"] = true
attention:
if you use this is method ,you should perform type conversion
for example
ages := maps["id"].(int) + 2
,verify if the key exists
val,res = mapVar[key]
val -- map[key] 中的值
res -- 值是否存在的结果
true -- exists
false -- not exists
,set map element value
mapVar["name"] = "small pig"
,get map length
mapLen := len(map)
,delete map length
delete(mapVar, "mapKey")
接口(interface)
// 接口定义
type numCount interface {
sums() int
}
// 人数和结构体
type manSum struct {
anum int
bnum int
}
// 自定义和结构体
type customSum struct {
num int
}
// manSum 结构体 实现接口(numCount)中的方法(sums)
func (manSum manSum) sums() int{
return manSum.anum * manSum.bnum
}
// customSum 结构体 实现接口(numCount)中的方法(sums)
func (customSum customSum) sums() int {
return 5 + customSum.num
}
// 接口调用
func interfaceExec() {
// 该行可注释
var numCount numCount
numCount = manSum{anum: 10, bnum: 5}
fmt.Println(numCount.sums())
numCount = customSum{num: 10}
fmt.Println(numCount.sums())
}
// 代码含义
以上实例中,我们定义了一个 sumCount 接口,它定义了一个方法 sums(),该方法返回一个 int 类型的面积值。然后,我们定义了两个结构体
manSum 和 customSum,它们分别实现了 sumCount 接口的 sums() 方法。在 interfaceExec() 函数中,我们首先定义了一个 sumCount
类型的变量 numCount,然后分别将 manSum 和 customSum 类型的实例赋值给它,并通过 sums() 方法计算它们的面积并打印出来,