首页 > 后端开发 > Golang > 正文

Golang函数的map、slice、struct以及interface类型的使用方法

PHPz
发布: 2023-05-17 08:02:07
原创
1092 人浏览过

Golang是一门由Google开发的开源编程语言,它采用了静态类型和垃圾回收机制,同时支持并发编程。Golang中函数是重要的组成部分,而map、slice、struct以及interface是函数中常用的数据类型。本文将介绍Golang中这些数据类型的使用方法。

1. map类型

map是一种键值对的数据结构,在Golang中,它的使用方法很简单。下面是一个例子:

package main

import "fmt"

func main() {
    m := make(map[string]int)
    m["apple"] = 1
    m["banana"] = 2
    m["orange"] = 3
    fmt.Println(m)
}
登录后复制

上面的例子中,我们先使用make函数创建了一个空的map,然后将键值对依次添加到map中。最后,使用fmt包中的println函数输出了这个map。

除了使用make函数创建map之外,我们还可以使用字面量的方式创建一个非空的map,如下所示:

package main

import "fmt"

func main() {
    m := map[string]int{"apple": 1, "banana": 2, "orange": 3}
    fmt.Println(m)
}
登录后复制

我们也可以在声明变量时将map一起声明,如下所示:

package main

import "fmt"

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["apple"] = 1
    m["banana"] = 2
    m["orange"] = 3
    fmt.Println(m)
}
登录后复制

当然,如果map中不存在某个键值对,我们可以使用delete函数将其删除,如下所示:

package main

import "fmt"

func main() {
    m := make(map[string]int)
    m["apple"] = 1
    m["banana"] = 2
    m["orange"] = 3
    delete(m, "banana")
    fmt.Println(m)
}
登录后复制

2. slice类型

slice是一种动态数组,可以随时添加或删除元素。下面是一个例子:

package main

import "fmt"

func main() {
    s := make([]string, 3)
    s[0] = "apple"
    s[1] = "banana"
    s[2] = "orange"
    s = append(s, "grape")
    fmt.Println(s)
}
登录后复制

上面的例子中,我们使用make函数创建了一个元素类型为string、长度为3的slice。然后,我们向slice中添加了3个元素,最后使用append函数向slice中添加了一个新的元素。

当然,我们还可以使用字面量的方式创建一个非空的slice,如下所示:

package main

import "fmt"

func main() {
    s := []string{"apple", "banana", "orange"}
    s = append(s, "grape")
    fmt.Println(s)
}
登录后复制

我们也可以在声明变量时将slice一起声明,如下所示:

package main

import "fmt"

func main() {
    var s []string
    s = make([]string, 3)
    s[0] = "apple"
    s[1] = "banana"
    s[2] = "orange"
    s = append(s, "grape")
    fmt.Println(s)
}
登录后复制

3. struct类型

struct是一种自定义的复合类型,可以存储多种类型的数据。下面是一个例子:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{"Tom", 18}
    fmt.Println(p)
}
登录后复制

上面的例子中,我们使用type关键字创建了一个名为Person的struct类型。然后,我们创建了一个变量p,它的类型为Person,并且给它赋了值。

除此之外,我们还可以使用结构体指针来访问struct类型中的字段,如下所示:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := &Person{"Tom", 18}
    p.Name = "Jerry"
    fmt.Println(p)
}
登录后复制

4. interface类型

interface是一种抽象的类型,可以用来表示任何类型。下面是一个例子:

package main

import "fmt"

type Animal interface {
    Eat()
}

type Cat struct {
    Name string
}

func (c *Cat) Eat() {
    fmt.Printf("%s is eating
", c.Name)
}

func main() {
    var a Animal
    a = &Cat{"Tom"}
    a.Eat()
}
登录后复制

上面的例子中,我们使用type关键字创建了一个名为Animal的interface类型,它只有一个方法Eat。然后,我们使用type关键字创建了一个名为Cat的struct类型,它实现了Animal类型的Eat方法。最后,我们创建了一个变量a,它的类型为Animal,并将其赋值为Cat类型的变量。我们调用a的Eat方法时,输出了一句话表明Cat在吃东西。

除此之外,我们还可以使用类型断言来判断一个变量是否实现了某个接口,如下所示:

package main

import "fmt"

type Animal interface {
    Eat()
}

type Cat struct {
    Name string
}

func (c *Cat) Eat() {
    fmt.Printf("%s is eating
", c.Name)
}

func main() {
    var a Animal
    a = &Cat{"Tom"}
    _, ok := a.(*Cat)
    fmt.Println(ok)
}
登录后复制

上面的例子中,我们使用type关键字创建了一个名为Animal的interface类型,它只有一个方法Eat。然后,我们使用type关键字创建了一个名为Cat的struct类型,它实现了Animal类型的Eat方法。最后,我们创建了一个变量a,它的类型为Animal,并将其赋值为Cat类型的变量。我们使用类型断言来判断a是否实现了Cat类型,输出了true。

以上是Golang函数的map、slice、struct以及interface类型的使用方法的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板