【Golang学习笔记】01

要点
- 变量
- 常量
- 结构体
- 强制转换
- map
- slice
- channel
- 自定义数据类型
- 命名
- 占位符

变量

命名方式

  • 变量名称 变量类型 = 值
    var x int = 100
    var y float32 = 3.21
    var z string = "HelloWolrd"
    var h,g int32 = 5, 5    //h g 都必须是 int32类型
  • 变量名称 = 值 自动推导变量类型
    var a = 900
    var b = 3.21
    var c = "HelloWolrd"
  • 变量名称 = 值 自动推导变量类型
    var a = 900
    var b = 3.21
    var c = "HelloWolrd"

    // 同时声明两个变量 reflect.TypeOf()得到数据类型
    var m,n = 1, 0.1
    fmt.Println(reflect.TypeOf(m))
    fmt.Println(reflect.TypeOf(n))   // float64
  • var()的形式
    var (
        q = 1
        w = 0.2
        e = "heyhey"
        )
  • 变量 := 值 不能在函数外定义
    r := 99

    // 不需要第三个变量就可以交换两个变量
    t := 1
    u := 2
    t, u = u, t

常量

  • const 变量名称 (变量类型) = 值
    const x, y int = 1,3
    const s = "helloworld"
  • const ()
    const (
        a int = 1
        b = 2
        c     // 自动复制上面的值 2
        d     // 2
        )
    fmt.Println(a,b,c,d) // 结果为 1 2 2 2
  • iota 使用iota实现自增加
    const (
        q = 1
        w = iota
        e = 100
        r
        t = iota
        y
        )
    fmt.Println(q,w,e,r,t,y)  // 1 1 100 100 4 5 iota表示的是其所在的位置

未赋值的值和上一个值一样,如果上一个值是常量,本值也是常量,如果上一个值是iota,则本值为上一个值+1。第一个值必须被赋值,否则无法通过编译。

结构体

    type Student struct{
        Name string
        Age int
    }
  • 使用new创建一个结构体

    stu1 := new(Student)      
    stu1.Name = "qqq"
    stu1.Age = 1
    
    fmt.Println(stu1)   // &{qqq 1}
  • 使用&创建一个结构体

    stu2 := &Student{"zzz", 2}
    
    fmt.Println(stu2)   // &{zzz 2}

强制转换

  • string 转 int数组
    x := "0Abc"
    fmt.Println([]int32(x))     // 输出为ASCll [48 65 98 99]
  • float 转 int
    y := 1.2
    fmt.Println(int(y))   // 1
  • 取地址
    u := 123
    fmt.Println(&u)    // 动态地址

map

  • map[key]value
    m := make(map[int]string)       
    m[1] = "1"
    m[2] = "2"
    fmt.Println(m)   // map[1:1 2:2]

slice

  • 截取
    s := []int{1,2,3,4,5,6,7,8} // 声明数组
    s = s[0:6]      // 截取 s[0] - s[5] 不包括 s[6]
    fmt.Println(s)  //[1 2 3 4 5 6]
  • 截取
    sl := make([]int,3, 3)      //make(数据类型, Size, 最大Size) 使用make分配内存空间
    sl = append(sl, 4)          // 添加
    fmt.Println(sl)             // [0 0 0 4]

-动态分配内存

    qq := 5
    e := make([]int, qq)
    fmt.Println(e)     // [0 0 0 0 0]

channel

  • make(chan 数据类型, 大小)
    c := make(chan int, 5)
    c <- 1
    c <- 2
    c <- 3

    fmt.Println(<-c)   // 1
    fmt.Println(<-c)   // 2
    fmt.Println(<-c)   // 3

自定义数据类型

-type 自定义名称 已有数据类型

    type MyInt int
    var q MyInt = 2
    //var c int = q 无法通过编译
    fmt.Println(q)

命名

-开头字母大写代表可以被外部包调用,公有。
-小写则代表不可以被外部包调用,私有

_占位符

  • 因为若有未使用的变量(除const)则无法通过编译,所以对于一些有多个返回值的函数来说,需要占位符来替代那些我们并不需要的返回值。
    x,_ = strconv.Atoi("12")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值