内容简介:打卡时间: 23:27
测试代码
- hello.go
package main import "fmt" /** *该程序目的 * 学习 go 的复杂数据结构: 数组,指针,结构体,切片,集合 */ func main() { /** * 方式: var arrayName [len] type * 例: var nums [10] int * 声明一个数组和遍历它 */ var nums [10]int //声明一个数组 fmt.Println(len(nums)) fmt.Println(cap(nums)) for idx := 0; idx < len(nums); idx++ { fmt.Println(nums[idx]) } /** * 声明和初始化一起 */ var names = []string{"jack", "andy", "lisa"} fmt.Println(names) /** * 指针:保存内存地址的变量 * &运算符,获取变量的内存地址 * *运算符,获取内存地址存放的数据 * 空指针: nil判断 * %x十六进制格式输出 小写 * %X十六进制格式输出 大写 */ var age int = 20 fmt.Println("age变量的内存地址:", &age) fmt.Printf("age变量的内存地址:%x\n", &age) fmt.Printf("age变量的内存地址:%X\n", &age) var ageP *int = &age fmt.Println(ageP) fmt.Println(*ageP) var intp *int if intp == nil { fmt.Println("是空指针") } else { fmt.Println("非空指针") } /** * 结构体对象的创建 * 对象的判空? * 结构体指针: '.'操作符访问结构体对象的属性 */ var jack = Person{"jack", 10} var andy = Person{"andy", 20} fmt.Println(jack) fmt.Println(andy) fmt.Println(jack.name) var ppoint *Person = &jack fmt.Println(ppoint.name) ppoint.age = 30 fmt.Println(jack.age) var paul = Person{"paul", 30} changePersonName(paul, "newPaul") fmt.Println("name:", paul.name) //修改失败, paul chagePersonName2(&paul, "PaulJun") fmt.Println("name:", paul.name) //修改成功,PaulJun /** * 切片,类似可以扩容的数组 * make([]type, length, capacity) , length<=capacity, 否则报错 * len(), cap() * 切片操作:[:],类似python * append扩容, copy拷贝元素 */ var nums2 []int = make([]int, 10, 20) //长度为10, 容量为20 fmt.Printf("len=%d, cap=%d, nums2=%v\n", len(nums2), cap(nums2), nums2) //len=10, cap=20, nums2=[0 0 0 0 0 0 0 0 0 0] var nums3 = []int{1, 2, 3, 4, 5, 6, 7} fmt.Println(len(nums3), cap(nums3), nums3) //7 7 [1 2 3 4 5 6 7] var endIndex = len(nums3) - 1 fmt.Println("endIndex=", endIndex) //6 fmt.Println(nums3[:endIndex]) //索引为0-5的元素 [1 2 3 4 5 6] fmt.Println(nums3[1:4]) //索引1-3的元素,不包含索引为4 [2 3 4] fmt.Println(nums3[0:]) //[1 2 3 4 5 6 7] var nilNums []int if nilNums == nil { fmt.Println("空切片") } var newNums3 = append(nums3, 10) //append生成一个新的切片 fmt.Println(newNums3) var doubleNums3 = make([]int, len(nums3)*2, cap(nums3)*2) copy(doubleNums3, nums3) fmt.Println(doubleNums3, cap(doubleNums3)) /** * range关键字 * 用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)、集合(map)或字符串(string)的元素 */ var nums4 = []int{10, 20, 30, 40} for idx, val := range nums4 { fmt.Println(idx, "->", val) } var info = "hello,go" for idx, chr := range info { //第二个是字符Unicode的值 fmt.Println(idx, "->", chr) } /** * map: key-val * 声明: var map[key_type]val_type */ var scores = make(map[string]float32) scores["jack"] = 98.5 scores["andy"] = 78.5 for k:= range scores { fmt.Println(k) } for k,v := range scores { fmt.Println(k, "-", v) } delete(scores, "jack") //删除key: jack的键值对 fmt.Println(scores) fmt.Println(factorial(15)) /** *go类型转换 * type(val) */ var val = 50 fmt.Printf("%d\n",val) fmt.Printf("%f\n", float32(val)) //val转成float32的类型变量 /** * 接口interface * new(T) 函数分配内存, 返回一个指向类型为 T,值为 0 的地址的指针 * make(T) 函数初始化 返回一个类型为 T 的初始值 */ var animal Animal animal = new(Cat) fmt.Println(animal.typeName()) animal = new(Dog) fmt.Println(animal.typeName()) } /** * 结构体声明,类似C语言 * type struct关键字 */ type Person struct { //声明Person结构体,包含name和age两个属性 name string age int } /** * 结构体作为参数是值传递 */ func changePersonName(person Person, newName string) { person.name = newName } /** * 改变结构体的属性值,函数中须通过指针 */ func chagePersonName2(personp *Person, newName string) { personp.name = newName } /** * 递归demo */ func factorial(num uint64) uint64 { if num>1 { return num* factorial(num-1) } return 1 } /** * 声明接口 */ type Animal interface { typeName() string } type Cat struct { name string } /** * 实现该方法 */ func (cat Cat) typeName() string { return "Cat" } type Dog struct { name string } func (dog Dog) typeName() string { return "Dog" }
- 总结
- 数据,指针,切片,集合,结构体,接口的基本使用
打卡时间: 23:27
以上所述就是小编给大家介绍的《golang第二天》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning Apache Struts
Arnold Doray / Apress / 2006-02-20 / USD 44.99
Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!