初识 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

时间: 2024-12-07 06:51:18

初识 go 语言:方法,接口及并发的相关文章

初识 go 语言

目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束语 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学下go,本文也是从零开始,将go的基本语法,结构体,函数,方法,接口,并发等以小demo的方式进行讲解,有的地方会对比java加深记忆 go简介 go又称golang 是由Google开发,于2009年11月开源的一种服务端编程语言,go 很简洁,高效,支持并发 ,总之值得一看-- 维基百科 安装

初识Django —Python API接口编程入门

初识Django -Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言,基于Django框架,利用MVC模型,实现后台方面的针对数据库的API开发.先了解一下互联网的WEB架构, 如上图: 互联网的WEB架构大致分为三层,web层.app层和数据库层.Web层:如apache网站服务器:app层主要是应用业务:DB指后台数据库.随着互联网的高速发展,网站访问量的增长.数

【Go语言】【14】GO语言的接口类型

1.什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的.怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭.睡觉等: interface Person { // 人会吃饭 void eat(); // 人会睡觉 void sleep(); } 我是站在接口角度上考虑接口如何定义,此时不会过多考虑实现类的行为. 这很正常,因为我不能确定谁会使用我的接口,有一天SuperMan说:"我要用你定义的接口",那Super

Java语言Socket接口用法详解

Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求. 扩展: ServerSocket中常用的构造函数及方法 构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象

Go语言开发(五)、Go语言面向接口

Go语言开发(五).Go语言面向接口 一.Duck Typing简介 1.Duck Typing简介 对于一门强类型的静态语言来说,要想通过运行时多态来隔离变化,多个实现类就必须属于同一类型体系,必须通过继承的方式与同一抽象类型建立is-a关系.而Duck Typing则是一种基于特征,而不是基于类型的多态方式.Duck Typing仍然关心is-a,只不过is-a关系是以对方是否具备相关的特征来确定的.是否满足is-a关系可以使用所谓的鸭子测试(Duck Test)进行判断."当看到一只鸟走起

Java中使用HttpRequest调用RESTfull的DELETE方法接口提示:How to fix HTTP method DELETE doesn&#39;t support output

说明:无论是Spring框架还是Spring Boot的Feign形式的客户端,以下的解决方法都适用. 解决方法:直接升级JDK 1.8,这个问题是1.7的BUG. 参考: https://salesforce.stackexchange.com/questions/34624/http-method-delete-doesnt-support-output https://salesforce.stackexchange.com/questions/66097/how-to-fix-http-

[日常] Go语言圣经--接口约定习题

Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自由的使用另一个满足相同接口的类型来进行替换被称作可替换性(LSP里氏替换) 练习 7.1: 使用来自ByteCounter的思路,实现一个针对对单词和行数的计数器.你会发现bufio.ScanWords非常的有用. package main import ( "bufio" "f

《C语言启蒙》--第一章 初识c语言

阅读书籍的名称  <c primer> c语言的启蒙书籍. 第一章:初识c语言 1背景: c 语言很牛逼,可以跨平台,必须得会. 2.计算机的工作原理: 3.编译的过程 我们写完的代码称之为源代码,程序运行的实质是对01的不同位置的变化,而源代码需要转化成cpu可以执行的指令,也就是机器码,这个过程就是编译的过程,需要编译器来帮助我们来完成,c语言的文件中你肯定会用到各种库,这就需要c可以引入操作系统中的库文件,同时文件的启动需要启动代码,这些都需要引入,这个引入的工具就是连接器,最终将各个文

初识R语言

初识R语言 R语言简介 R的命名 来源于R语言的发明者--新西兰奥克兰大学的Ross Ihaka和Robert Gentleman R语言是什么 一种计算机语言 提供广泛的统计分析和绘图技术 用于统计计算和绘图的语言和环境 应用领域 金融领域数据统计与计算 数据挖掘.机器学习必备工具 三大优点 免费开源 全面的统计研究平台 顶尖制图水准 R和Rstudio界面简介 Rstudio 四大面板 Panel 1:显示.修改脚本 Panel 2:控制台,写命令 Panel 3:工作环境.历史信息 Pan