Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 初识 go 语言:方法,接口及并发

初识 go 语言:方法,接口及并发

发布时间:2021-05-16   编辑:www.jquerycn.cn
jquery中文网为您提供初识 go 语言:方法,接口及并发等资源,欢迎您收藏本站,我们将为您提供最新的初识 go 语言:方法,接口及并发资源

目录

  • 方法,接口及并发
    • 方法
    • 接口
    • 并发
    • 信道
  • 结束语

前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行。


方法,接口及并发

方法

方法就是一类带特殊的接收者(struct)参数的函数

  • 通过 结构体.方法 调用
    示例:
type city struct {
    name, address string
}

func (c city) sysCity() {
    c.name = "帝都"
    fmt.Println(c.name, c.address)
}

func testFunc() {
    c := city{
        "北京", "二环",
    }
    c.sysCity()
    fmt.Println(c)
}
  • fmt.Println(c)输出的还是{北京 二环},并没有因为在sysCity()中给c.name赋值而改变结构体的值

    指针接收者

    上面说过可以指针去改变结构体的值,所以也可以通过指针接收者去改变结构体的值
//就在struct类型前加个*就是获取结构体指针了
func (c *city) sysCity() {
    c.name = "帝都"
    fmt.Println(c.name, c.address)
}
  • 尝试输出一下

接口

使用 interface关键字表示一个接口,接口是由一组方法签名定义的集合
示例:

//接口
type adder interface {
    syso()
}
//隐式调用,无需声明
func (x city) syso() {
    fmt.Println(x.name, x.address)
}
func main() {
    var var1 adder
    var2 := city{
        "长安", "皇城",
    }
    var1 = &var2
    var1.syso()
    
    //还可以简写成这样
    var var3 adder = city{
        "帝都", "皇城",
    }
    var3.syso()
}

空接口:interface {} 没有方法
为了判断 一个接口值是否保存了一个特定的类型,类型断言可返回两个值:其底层值以及一个报告断言是否成功的布尔值。
例:t, ok := i.(T)
若 i 保存了一个 T,那么 t 将会是其底层值,而 ok 为 true。
否则,ok 将为 false 而 t 将为 T 类型的零值,程序并不会产生恐慌。

func main() {
    var i interface{} = "this go"
    v, ok := i.(string)
    fmt.Println(v, ok)
    v, ok := i.(int)
}

并发

命令 go 新起一个线程叫go程,go程相当于另起一个线程
示例:

func hello(x string) {
    for i := 0; i < 5; i   {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(x)
    }
}
func main() {
    go hello("go")
    hello("say")
}
  • 输出 say go

信道

信道是带有类型的管道,你可以通过它用信道操作符 <- 来发送或者接收值。
(“箭头”就是数据流的方向)

func sum(x int, var1 chan int) {
    sum := x
    for i := 0; i < 5; i   {
        time.Sleep(100 * time.Millisecond)
        sum = sum   i
    }
    var1 <- sum
}
func main() {
    var1 := make(chan int)
    go sum(10, var1)
    go sum(20, var1)
    x, y := <-var1, <-var1
    fmt.Println(x   y)
}

ch := make(chan int, 100)

  • 100指定缓冲大小
  • 我的理解就是信道里可以容纳的量
    尝试输出以下两段代码,或者将1改成2,体验下区别:
func main() {
    ch := make(chan int, 1)
    ch <- 21
    fmt.Println(<-ch)
    ch <- 100
    fmt.Println(<-ch)
}
func main() {
    ch := make(chan int, 1)
    ch <- 21
    ch <- 100
    fmt.Println(<-ch)
    fmt.Println(<-ch)
}


结束语

初识 go 语言系列

  • [x] 初识 go 语言
  • [x] 初识 go 语言:语法
  • [x] 初识 go 语言:数据类型
  • [x] 初识 go 语言:方法,接口及并发

欢迎关注我的公众号

转载于:https://www.cnblogs.com/cmyxn/p/9332530.html

到此这篇关于“初识 go 语言:方法,接口及并发”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
初识 go 语言:方法,接口及并发
Go语言发展历史、核心、特性及学习路线
想系统学习GO语言(Golang
go 获取函数地址_Go语言基础--接口浅析
Go 语言到底适合干什么?
go语言核心编程_Go语言核心编程李文塔
Go 语言十年而立,Go2 蓄势待发
Go 开发关键技术指南 | 为什么你要选择 Go?(内含超全知识大图)
基于类型系统的面向对象编程语言Go
go比php好在哪里

上一篇:go 方法 下一篇:Go基础编程:Map
[关闭]