栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

4.Golang基础 -3 - 2

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4.Golang基础 -3 - 2

3.6.指针

指针保存了值的内存地址
类型 *T 是指向T类型值的指针,其值为nil

var p *int
func main() {
	i:=10
	p = &i
	*p = -1
	fmt.Println(i) // -1
}
3.7. 结构体
type Student struct{
	Name string
	Number string
}

func main(){
	student := Student{Name: "liyuan", Number: "20181001332"}
	//通过 . 来访问结构体字段
	student.Name = "-1"
	fmt.Println(student) //{-1 20181001332}

	//结构体指针:结构体字段可以通过结构体指针来访问
	// (*student).Name  <=> stduent.Name
	student2 := &student
	student2.Name = "-2"
	fmt.Println(student) //{-2 20181001332}

	//结构体文法
	v1 := Student{Name:"l1",Number:"num1"}
	v2 := Student{Name: "l2"}
	v3 := Student{Number: "num3"}
	v4 := &Student{"l4","num4"}   //创建一个*Student类型的结构体指针
}

3.8.数组
	var a [2]string
	a[0] = "name1"
	a[1] = "name2"
	fmt.Println(a) //[name1 name2]

	//切片 -> 范围区间 [lo, hi)
	//语法类似python,但没有负数概念 如 nums[0:-3]
	var nums [10]int{0,1,2,3,4,5,6,7,8,9}
	var nums1 [int] = num[1:4] //[1 2 3]
	//切片共享底层数据
	nums[1] = -1
	fmt.Println(nums1) //[-1 2 3]
	//切片文法
	stus := []struct {
		Name   string
		Number string
	}{
		{Name: "liyuan1", Number: "0001"},
		{Name: "liyuan2", Number: "0002"},
		{Name: "liyuan3", Number: "0003"},
	}
	fmt.Println(stus)

	//切片默认取值 
	nums2 := nums[0:] //上界为切片的长度
	nums3:= nums[:5] //下界为0
	nums4:=nums[:]

	//有了切片的概念,就会产生切片实际长度以及其总容量的概念 ,类似ArrayList<>();初始化时容量默认为
	nums5:= nums[5:9]
	fmt.Println(nums5)		 //[5 6 7 8]
	fmt.Println(len(nums5))  //4
	fmt.Println(cap(nums5))  //5
 

//参考 ArrayList<>()实现可知,ArrayList<>()时长度为0

//当我们向其中添加元素时

//会重设容器的大小

//并设置默认大小为0,就是所谓的容量


// 经过这些操作,我们现在就获得了一个容量为10,但长度为1的容器

func  main(){
	//nil切片,切片的零值为nil, nil切片的长度和容量均为0,且无共享底层数组
	//使用make来创建数组
	a: = make([]int, 5)
	b:= make([]int,0,5)
	fmt.Println(b)  // []
	b = b[:cap(b)] 
	fmt.Println(b) // [0,0,0,0,0]
	b = b[1:]
	fmt.Println(b) // [0,0,0,0]

	//切片的切片
	nums:= []int{1,2,3,4,5,6,7,8,9,10}
	nums2 = nums[1,5] //[2 3 4 5]
	nums3 = nums2[1,2] //[3]

	//向切片添加元素
	// func append(s []T, vs ...T) []T
	//会产生一个新的数组
	nums4 := append(nums,11,12,13)

	// 切片遍历 index: 索引;value:值的副本
	for index,value :=range nums{
		fmt.Println(index,value)
	}
	//可通过 _ 来忽略参数
	for index, _ := range nums{
		...
	}

	for _, value := range nums{
		...
	}
	
}

3.9.map映射

打法和python如出一辙,其中nil表示没值,使用make进行初始化

var m map[int]string

type Stu struct{
	Name string
	Number string	
}

func main(){
	m = make(map[int]string)
	m[0] = "liyuan0"
	m[1] = "liyuan1"
	fmt.Println(m) //map[0:liyuan0 1:liyuan1]
	
	//结构体映射
	m1 := map[string]Stu {
		"0":{"liyuan0","0000"},
		"1":{"liyuan1","0001"},
	}
	//修改映射值
	m["0"] = {"liyuan2","0002"}
	delete(m,"0")
	//查找元素是否存在,若元素存在,则elem为该值,ok为true
	elem, ok :=m["2"]
}

3.10.函数值(闭包)

函数本身也是值,我们可以像其他值一样传递它;
可用作函数的参数或返回值

//函数闭包,闭包是一个函数值,其引用了其他函数体之外的变量这些函数可以访问并赋予其引用的变量的值,一下为fibonacci闭包实现
func fibonacci() func() int {
	pre0 := 0
	pre1 := 1
	return func() int {
		tmp:=pre0 + pre1
		pre0 = pre1
		pre1 = tmp
		return tmp
	}
}

func main() {
	f := fibonacci()
	for i := 0; i < 10; i++ {
		fmt.Println(f())
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/499009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号