【自用】【流水账儿】Go学习笔记

11.5

fmt.Printf:类似C的printf:fmt.Printf("%d",n),不自动换行

fmt.Println:直接输出内容:fmt.Println(n),fmt.Println("helloworld"),自动换行

从import带入的函数的格式:包名.函数名。函数名首字母大写。

go自带函数无包名,首字母小写。eg:printf

for不带括号,当不写分号时,for当while用。

BWtWsf.png(惊不惊喜,意不意外?

!注意:for和if都必须要带{},并且大括号不换行

switch自带break,不用再手写break。想关闭break用fallthrough

go的switch可以不带参数,在case中写条件表达式;c不行。

todo:指针

11.6

指针: var p *int:定义指针p

&x:x的地址

*p:p的底层值

结构体:

type emm struct{
  var x,y int
}
func main(){
  var a emm{}
  var b emm{1,0}
  var c emm{x,0}
  var d &emm{1,0}
}

  

  

数组:

var a [10]int

切片:左开右闭

var s []int = a[1:4]  //s:{a[1],a[2],a[3]},坐标从0开始

切片就像数组的引用

切片并不存储任何数据,它只是描述了底层数组中的一段。

 11.7

 对“引用”的一个很好的例子:

BIKniR.png//len:切片所包含的元素个数;cap:从切片的第一个元素开始数,到其底层数组元素末尾的个数。

但是感觉指令不明确...s[0:]是指延长到从0开始,还是从当前的0开始截呢?

s==[]    等价于 s==nil

声明切片的make语句:

a:=make([]int,x)//x=len=cap

a:=make([]int,x,y)//x=len,y=cap

二维切片:

board:=[][]int{
  []int,
  []int,
  []int,
}

 

11.11

append:在切片尾部加元素

    s := make([]int,5)//建一个长为5的切片
    s = append(s,1)//在s后面加一个元素1
    //注意:只能加切片的元素,不能用于切片连接

  

range:遍历

 

    s := []int{2,4,6,8,10}
    for i,v := range s{//i,v可用_替换
        fmt.Println(i,v)  
    }

  

二维切片的循环建立:

    s := make([][]int , y)
    for i:=1 ; i <= y; i++{
    s[i] = make ([]int , x)
    }

 Bqz3VI.png//slice练习:创建二维切片,在x*y切片内每格赋值

11.12

map:

    m := make(map[string]int)
    m["Bob"]=2333
    v := m["Bob"]//v=2333
    v1,ok := m["Bob"]//v1=2333 , ok用于检测"Bob"是否存在(true/false)
    delete(m,"Bob")

  

 //map练习:用string.Fields函数,获得一个map,装有字符串s的每个单词出现个数。

 11.13

函数的闭包

就硬莽。

//pos和neg函数的sum相互独立

//返回斐波那契数列的闭包

11.17

方法

好像可以用来替代class,但我本来也不会用class(

相当于

 指针接收者:

直接写函数->必须确定指针or值

写指针接收者->写指针or值都可

 

 写成指针接收者貌似是个好习惯。

接口

不太能理解。

 11.18

原文地址:https://www.cnblogs.com/qwerta/p/13934437.html