语法介绍:数组、切片、map、结构体、接口
数组
//数组作为函数参数传入 //以值的形式进行传入 func Fun1(p [5]int) { for i, data := range p { data++ fmt.Println("i=", i, " data=", data) } } //数组以指针的形式传入 func Fun2(p *[5]int) { len := len(p) for i := 0; i < len; i++ { fmt.Println((*p)[i]) } } func main() { var a [5]int = [5]int{1, 2, 3, 4, 5} fmt.Println("len(a)=", len(a)) Fun1(a) Fun2(&a) }
切片
var a []int = []int{1, 2, 3, 4, 5} //切片 fmt.Println(a) b := a[1:3:5] //a[low:high:cap] ——>[low,high) fmt.Println(b) c := make([]int, 3, 4) //make创建一个切片,make(类型,长度,容量) fmt.Println("len=", len(c), " cap=", cap(c))
map
m := map[int]string{} m[1] = "yyqx" //添加一个键值对 m[2] = "hm" fmt.Println(m) delete(m,2) //delete(map,key)删除一个键值对
结构体
//定义结构体 type Person struct { name string age int } type Student struct { Person //继承 id int score int } //为结构体类型定义方法 func (temp Person) Print() { fmt.Printf("name=%s age=%d\n", temp.name, temp.age) } func (s Student) Print() { fmt.Printf("name=%s age=%d id=%d score=%d\n", s.name, s.age, s.id, s.score) } func main() { p := Person{"yyqx", 18} p2 := Student{Person{"hm", 18}, 1128, 100} p2.Print() p.Print() }
结果:
name=hm age=18 id=1128 score=100 name=yyqx age=18
数组、结构体:都是以值的形式进行传参
切片、map:以引用形式进行传参
接口与多态
type Interface1 interface { sayHi() //只有方法定义,没有实现 } type Person struct { name string age int } type Student struct { Person id int score int } func (temp Person) sayHi() { fmt.Printf("person %s %d\n", temp.name, temp.age) } func (temp Student) sayHi() { fmt.Printf("student %s %d\n", temp.name, temp.age) } //多态 func Fun1(p Interface1) { p.sayHi() } func main() { p := Student{Person{"yyax", 18}, 1, 100} Fun1(p) }
结果:
student yyax 18