**** 理解切片
ptr指向了一块内存区域 大小是cap 实际存放的内容大小是len 每次执行切片后相当于存放了一个指向该位置的索引结构 故修改值会相互影响 是一种引用
在创建数组时没有指定大小即是创建切片 。或者声明了一个数组后 从数组中再进行切片
*** 变参
func addandsub(a int, b int) (int, int){
return a + b , a - b
}
func addarray(nums ...int) int {
ret := 0
for _, num := range nums{
ret += num
}
return ret
}
func main() {
res1, res2 := addandsub(1,2)
fmt.Println(res1, res2)
a := [4]int{1,2,3,4}
fmt.Println(addarray(a[:]...))
}
当使用slice传入时使用...展开
*** 结构体定义
type Student struct {
age int
name string
}
有struct 和interface 两种
定义属于结构体的方法
func (s *Student) change(newage int){
s.age = newage
}
func (s Student) printAge(){
fmt.Println(s.age)
}
func main() {
stu1 := Student{20,"sihao"}
stu1.change(27)
fmt.Println(stu1.age)
stu1.printAge()
}
golang 会自动判断当为指针时 自动使用(*p).func或者(*p).name (加上这个特性不就相当于引用了?)
** 对unicode字符集的特殊处理 rune
func main() {
s := "nihao 你好"
// rune代表一个真正意义上的字符(特别是在unicode中) 使用len得到的是字符数组
fmt.Println(len(s), len([]rune(s)))
}