前言: 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. linux下的qt串口通信

    1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...

  2. git rebase 使用详解

    rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin   现 ...

  3. 智能POS如何获取日志&数据库文件

    使用Teamviewer连接安卓机器,文件传输 ================================================================== 智能POS查看数据 ...

  4. 深入理解Mysql索引的底层数据结构 B+ Tree (2)

    sql查询 explain的详细用法 操作时间:寻道时间+旋转时间 引入索引:采用二叉树结构 把第二列做为索引生成二叉树结构,此时查询89 只做了两次io操作 但是mysql 为什么不用二叉树作为底层 ...

  5. UGUI合批原理笔记

    可以通过Frame debugger查看每个drawcall绘制了哪些东西 UGUI源码下载地址:https://bitbucket.org/Unity-Technologies/ui/downloa ...

  6. eclipse IDE使用git方法简单介绍

    eclipse下使用git插件上传代码至github 1.eclipse下安装git eclipse  git 插件的安装. 点击 Help->Install New Software-> ...

  7. MongoDB在Linux系统下的安装与启动

    Mongodb介绍 MongoDB是一个开源文档数据库,提供高性能,高可用性和自动扩展,官方文档:https://docs.mongodb.com/manual/introduction/ Mongo ...

  8. 【Python 12】汇率兑换5.0(Lambda函数)

     1.案例描述 设计一个汇率换算程序,其功能是将美元换算成人民币,或者相反. 2.0增加功能:根据输入判断是人民币还是美元,进行相应的转换计算 3.0增加功能:程序可以一直运行,知道用户选择退出 4. ...

  9. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  10. windows环境:idea或者eclipse指定用户名操作hadoop集群

    方法 在系统的环境变量或java JVM变量添加HADOOP_USER_NAME(具体值视情况而定). 比如:idea里面可以如下添加HADOOP_USER_NAME=hdfs 原理:直接看源码 /h ...