go语言基础

74 阅读2分钟

Go 语言基础

一、切片(Slice)

1、概述 Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

2、定义切片 var identifier []type 或者使用make()来创建切片 slice1 := make([]type, len, capacity) 其中len 是数组的长度并且也是切片的初始长度。其中 capacity 为可选参数

二、map

1、用法

m := make(map[string]int)

map中[key]value类型分别是string和int

2、遍历用rang

for k, v := range m{  
    fmt.Println(k, v)   //数组同理
    }

三、指针

go中也有指针,但是操作有限,主要用与传入参数修改。
Go 语言的取地址符是&,\

如何使用指针

指针使用流程:

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。 1、例子

var va
r_name *var-type
var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

例子:

package main  
  
import "fmt"  
  
func main() {  
   var a int20   /* 声明实际变量 */  
   var ip *int        /* 声明指针变量 */  
  
   ip = &a  /* 指针变量的存储地址 */  
  
   fmt.Printf("a 变量的地址是: %x\n", &a  )  
  
   /* 指针变量的存储地址 */  
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )  
  
   /* 使用指针访问值 */  
   fmt.Printf("*ip 变量的值: %d\n", *ip )  
}

运行结果:

a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

2、指向指针的指针
var ptr**int

package main
​
import "fmt"//指向指针的指针
func main() {
    var (
        a    int   //  变量
        ptr  *int  // 指针
        pttr **int // 指针的指针
    )
    a = 2000    //变量赋值
    ptr = &a    //赋值a的地址
    pttr = &ptr //赋值ptr的地址
    fmt.Println("a的值", a)
    fmt.Println("a的地址", &a)
    fmt.Println("指针ptr指向的值", *ptr)
    fmt.Println("指针pttr指向的值", *pttr)
    fmt.Println("指针pttr的地址", &pttr)
    fmt.Println("指针pttr指向指针ptr指向的值", **pttr)
}


运行结果

a的值 2000
a的地址 0xc000014098
指针ptr指向的值 2000
指针pttr指向的值 0xc000014098
指针pttr的地址 0xc000006030
指针pttr指向指针ptr指向的值 2000
5a0a3f75607c45229bdbf9e4cf023902.png

四、结构体

可以将普通函数改成结构体的函数,让结构体使用。

func checkPassword(u user, password string) bool {
	return u.password == password
}
改成
func (u user) checkPassword(password string) bool {
	return u.password == password
}


就可以通过user.resetPassword("xxx")使用

有两种操作方法:

  • 带指针。可以对结构体进行修改的。
  • 不带指针。只是复制过来,不可以对结构体内的数据进行修改。