关于make的说明
普通形式:v := make([]int,100)
make仅仅适用于map,slice,channel,并且返回的不是指针,应当使用new获取特定的指针
可总结为:
new(T)返回*T指向一个零值T
make(T)返回初始化后的T
Goroutine通过通信来共享内存,而不是通过共享内存来通信
-----------------------------------------
go 中的字符串在赋值之后就不能够更改
----------------------------------------------------
数组也可以通过for range的方式来遍历
数组长度定义之后就不能更改,数组是值类型,每次传递的时候都是传递的是数组的拷贝
创建数组切片的两种方式
1、基于数组
如:var myArray [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
var mySlice []int = myArray[:5]
通过for range 来遍历
2、直接创建:使用make 关键值
mySlice1 := make([]int,5) // 创建一个初始元素个数为5的数组切片,元素的初始值为0
mySlice2 := make([]int,10)//创建一个初始元素个数为5的数组切片,元素的初始值为0,并预留10个元素的存储空间
mySlice3 := []int{1,5} // 直接创建并初始化包含5个元素的数组切片
3.动态增长
mySlice2 := []int {1,3}
mySlice = append(mySlice,mySlice2...) //...三个点是必须加上的
or mySlice = append(mySlice,6)
-----------------------------------------------------------------------------------
创建新的Map
type PersonInfo struct{
ID string
Name string
Address string
}
var myMap map[string] PersonInfo
myMap = make(map[string] PersonInfo)
或者 myMap = make(map[string] PersonInfo,100) //初始存储能力可以省略
或者 myMap = map[string] PersonInfo {
"12345": PersonInfo("1","dd","ddddddddd")
}
元素删除
delete(myMap,"222222222222"); 索引值是否存在不会影响结果,但是myMap为空怎会将导致程序抛出异常(panic)
查找元素
value,ok := myMap["123"]
if ok {//通过判断ok是否为true,进而判断
}
--------------------------------------------
switch 后不接表达式,此时switch的功能就等价于if else
-----------------------------------------------
不定参数类型
func myFunc(args...int){ //形如... type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数,这就是所谓的“语法糖”
for _,v := range args{
fmt.printLn("dddddddddddddddddddd");
}
}//从内部实现机理上而言,类型...type本质上是一个数组切片,即[] type
备注:可以使用直接数组切片作为参数传入其中,如下
func myFunc(args []int){
for _,v := range args{
//
}
}
这种方式调用的形式就要发生改变 myFunc([]int{1,5}),但是前者只需muFunc(1,6)
一种新颖的方式:使用interface {},传递任意类型的参数
func myPrint(args...interface{}){
for _,v := range args{
switch args.(type){
case int:
case string:
case int64:
}
}
}
func main(){
var v1 int = 1
var v2 int64 = 342
var v3 string = "dddddddddd"
myPrint(v1,v2,v3)
}
原文链接:https://www.f2er.com/go/190739.html