GO语法学习

1.变量和常量

        常量: const  变量名  type      

        变量: var    变量名  type

2.变量定义

        变量: 

  •  var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后
  • var  c,python,java bool

变量的初始化:

        变量声明包含初始值,每个变量对应一个

        如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型

       var i, j  int = 1,2

短变量声明

        在函数中,简洁赋值语句 :=   可在类型明确的地方代替var 声明

        函数外的每个语句都必须在关键词开始(var,func等),因此 := 结构不能再函数外使用。

        c, python, java := true, flase, "no!"

3.类型转换和推到

        类型转换

        表达式T(v) 将值v转换为类型T

                一些关于数值的转换

                var i int = 42

                var f float64 = float64(i)

                var u unit - uint(f)

               更简单的形式:

                i := 42

               f := float64(i)

               u := uint(f)

      类型推导

        在声明一个变量而不指定其类型是,变量的类型由右值推导得出。

        var i int

        j := i

4.数组

  • 相同类型且长度固定连续内存片段
  • 以编号访问每个元素
  • 定义方法   var  变量名[len]  type
  • myArray := [3]int{1,2,3}

5.切片(slice)

  • 切片是对数组一个连续片段的引用
  • 数组定义中不指定长度即为切片
  • 切片再为初始化之前默认为nil,长度为0 
  • func main(){
        myArray := [5]int{1,2,3,4,5}
        //这一部分就是定义的切片内容  ,从下标1到下标3结束
        mySlice := myArray[1:3]
        //定义切片
        mySlice1 := []int{}
        //在使用切片的时候,是不太用关心长度的,go语言自己就管理了
        mySlice1 = append(mySlice1, 1)
        //通过append就把切片给添加进来了,添加的时候,go语言会帮助进行扩充
        //但是要删除切片元素就很麻烦了
    
    }
    //删除切片元素,需要把元素前面的和元素后面的组成一个新的切片
    func deleteitem(slice []int. index int)[] int {
        return append(slice[:index], slice[index+1], .....)
    }
    

6.Make和New

  • New返回指针地址
  • Make返回第一个元素,可预设内存空间,避免未来的内存拷贝
  • Myslice1 := new([]int)
    Myslice2 := new([]int, 10)

Go语言是按值传递

mySlice := []int{10,20,30,40,50}
for _,val := range mySlice {
    val *= 2
}
//这个val值不会影响mySlice值,因为GO语言是按值传递,会复制一份临时变量

//如果想要修改,就需要下面的操作
for index, _ := range mySlice{
    mySlice[index] *= 2
}

7.Map

        声明方法:  var   map1 map[keytype]valuetype

//声明map方法1
    myMap := make(map[string]string, 10)
    myMap['a'] = "b"
//声明map方法2
    myFuncMap := map[string]func() int {
        "funcA": func() int { return 1 }
    }
    
fmt.Println(myFuncMap)
f := myFuncMap["funcA"]
fmt.Println(f())

//遍历map方法
    value, exists := myMap["a"]
    if exists {
        fmt.Println(value)
    }
//遍历
    for k, v := range myMap {
        print(k,v)
    }

8.结构体指针

  •   通过type.....struct 关键字自定义结构体
  • Go语言支持指针,但是不支持指针运算
  • 指针变量的值为内存地址
  • 未赋值的指针是nil
//定义接口,接口里面只能定义行为
type If interface {
    getName() string
}

//定义结构体,结构体里面只能定义属性
type Human struct{
    name,age string
}


func main(){
    h1 := Human{}
    //h1 就是human的指针变量
//new也是出来结构体变量指针
    h1 := new(human)

}

9.结构体标签

  • 结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag)
  • 使用场景: k8s APIserver 对所有资源的定义都用json tag  和 protobuff tag
    • nodeName string  ·json:"nodeName,omitempty·

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟道xn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值