前言: 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 语言:方法,接口及并发

欢迎关注我的公众号

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

  1. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  2. 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言

    Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...

  3. 初识 go 语言:数据类型

    目录 数据类型 指针 结构体 数组 切片 切片的方法 映射 函数闭包 结束语 前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示 ...

  4. 初识 go 语言:语法

    目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...

  5. 初识 go 语言

    目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学 ...

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

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  7. Go学习笔记:初识Go语言

    Go语言简介 Go语言是Google(谷歌)公司开发的一款静态型.编译型并自带垃圾回收机制和并发的编程语言. Go语言的风格类似于C语言.其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括 ...

  8. R语言数据接口

    R语言数据接口 R语言处理的数据一般从外部导入,因此需要数据接口来读取各种格式化的数据 CSV # 获得data是一个数据帧 data = read.csv("input.csv" ...

  9. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

随机推荐

  1. Redis订阅与发布

    发布与订阅模型在许多编程语言中都有实现,也就是我们经常说的设计模式中的一种--观察者模式.在一些应用场合,例如发送方并不是以固定频率发送消息,如果接收方频繁去咨询发送方,这种操作无疑是很麻烦并且不友好 ...

  2. matlab练习程序(神经网络识别mnist手写数据集)

    记得上次练习了神经网络分类,不过当时应该有些地方写的还是不对. 这次用神经网络识别mnist手写数据集,主要参考了深度学习工具包的一些代码. mnist数据集训练数据一共有28*28*60000个像素 ...

  3. (转)hibernateTools工具安装及使用总结(eclipse 3.6)

    最近项目采用flex+spring+hibernate的框架开发,之前虽说有多年的Java开发经验了,但是一直使用的JDBC或者 ibatis,hibernate的使用还是大姑娘上轿头一回,网上都介绍 ...

  4. Linux查杀stopped进程

      在Linux系统下面,top命令可以查看查看stopped进程.但是不能查看stopped进程的详细信息.那么如何查看stopped 进程,并且杀掉这些stopped进程呢? ps -e j | ...

  5. js 学习之路8:for循环

    1. for循环 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" content=&qu ...

  6. centos7.4系统升级kernel内核

    在实验环境下,已安装了最新的CentOS 7.4操作系统,现在需要升级内核版本. 实验环境CentOS-7-x86_64-Minimal-1708.iso CentOS Linux release 7 ...

  7. SQLServer之视图简介

    视图定义 视图是一个虚拟表,其内容由查询定义. 同表一样,视图包含一系列带有名称的列和行数据. 视图在数据库中并不是以数据值存储集形式存在,除非是索引视图. 行和列数据来自由定义视图的查询所引用的表, ...

  8. 【Teradata SQL】字符串分割函数STRTOK和STRTOK_SPLIT_TO_TABLE

    STRTOK函数: 按照指定分隔符,将字符串分割成多个部分,返回指定部分字符串. 参数说明: (1)instring:字符串或字符串表达式. (2)delimiter:分隔符列表,字符串每个字符都会做 ...

  9. Ubuntu 下重启网络的方法

    命令是: sudo /etc/init.d/networking restart 但是可能会遇到下面的提示: Running /etc/init.d/networking restart is dep ...

  10. Luogu4755 Beautiful Pair 最值分治、主席树

    传送门 整天做一些模板题感觉药丸 设\(val_i\)表示第\(i\)个位置的值 看到区间最大值考虑最值分治.对于当前的区间\([l,r]\),找到区间最大值\(mid\),递归\([l,mid-1] ...