Go语言的接口详解

Go语言的接口详解

接口就是一系列方法的集合(规范行为) 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为,规范子类对象的行为。 在 Go 语言中的接口是非侵入式接口(接口没了,不影响代码),侵入式接口(接口没了,子类报错) Go 也是鸭子类型,比如我现在有个鸭子类,内有 speak 方法和 run 方法,子类只要实现了 speak 和 run,我就认为子类是鸭子,我只要子类中有这两个方...
使用教程 601
一文理解Go 中的可寻址和不可寻址

一文理解Go 中的可寻址和不可寻址

1. 什么叫可寻址? 可直接使用 & 操作符取地址的对象,就是可寻址的(Addressable)。比如下面这个例子 func main() { name := "iswbm" fmt.Println(&name) // output: 0xc000010200 } 程序运行不会报错,说明 name 这个变量是...
使用教程 598
Go语言区别于其他语言的特性

Go语言区别于其他语言的特性

前言: 随着编程语言的发展,Go 还很年轻。它于 2009 年 11 月 10 日首次发布。其创建者Robert Griesemer Rob Pike 和 Ken Thompson在 Google 工作,在那里大规模扩展的挑战激励他们将 Go 设计为一种快速有效的编程解决方案,用于具有大型代码库、管理由多个开发人员,具有严格的性能要求,并跨越多个网络和处理核心。 Go 的创始人在创建...
使用教程 594
Go语言并发编程之互斥锁Mutex和读写锁RWMutex

Go语言并发编程之互斥锁Mutex和读写锁RWMutex

在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言中提供了很多同步工具,本文将介绍互斥锁Mutex和读写锁RWMutex的使用方法。 一、互斥锁Mutex 1、Mutex介绍 Go 语言的同步工具主要由 sync 包提供,互斥锁 (Mutex) 与读写锁 (RWMutex) 就是sync 包...
使用教程 590
Go select 死锁的一个细节

Go select 死锁的一个细节

下面对是一个 select 死锁的问题 package main import "sync" func main() { var wg sync.WaitGroup foo := make(chan int) bar := make(chan int) wg.Add(1) go func() { defer wg.Done() sele...
使用教程 596
Go官方工具链用法详解

Go官方工具链用法详解

Go官方工具链 为了从任意目录运行Go官方工具链中工具命令(通过go命令), Go官方工具链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。windows环境中需要在把安装目录下bin子目录添加到高级系统环境变量中保存生效。 Go官方工具链近来的版本都支持一个称为Go模块(Go modules)的特...
使用教程 605
Go语言--切片(Slice)详解

Go语言--切片(Slice)详解

说明: Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 一、定义切片 注意:切片不需要说明长度 1、声明一个未指定大小的数组来定义切片 var identifier []type //...
使用教程 597
golang交叉编译详细

golang交叉编译详细

1、环境变量对照表 golang交叉编译环境变量对照表 GOOS | GOARCH | OS VERSION ---|---|--- linux | 386 / amd64 / arm | >= Linux 2.6 darwin | 386 / amd64 | OX X (Snow Leopard + Lion) freebsd | 386 / amd64...
使用教程 594
Go 泛型和非泛型代码详解

Go 泛型和非泛型代码详解

1. 开启泛型 在 Go1.17 版本中,可以通过: export GOFLAGS="-gcflags=-G=3" 或者在编译运行程序时加上: go run -gcflags=-G=3 main.go 2.无泛型代码和泛型代码 2.1. AddSlice 首先看现在没有泛型的代码:  package main ​ imp...
使用教程 584
Go语言基础语法之结构体及方法详解

Go语言基础语法之结构体及方法详解

结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为。本文将介绍go语言中的结构体和方法,以及“继承”的实现方法。 结构体类型 结构体类型(struct)在go语言中具有重要地位,它是实现go语言面向对象编程的重要工具。go语言中没有类的概念,可以使用结构体实现类似的功能,传统的OOP(Object-Oriented Programming)思想中的继承在go中...
使用教程 611
Go并发编程实现数据竞争

Go并发编程实现数据竞争

1.前言 虽然在 go 中,并发编程十分简单, 只需要使用 go func() 就能启动一个 goroutine 去做一些事情,但是正是由于这种简单我们要十分当心,不然很容易出现一些莫名其妙的 bug 或者是你的服务由于不知名的原因就重启了。 而最常见的bug是关于线程安全方面的问题,比如对同一个map进行写操作。 2.数据竞争 线程安全是否有什么办法检测到呢? 答案就是...
使用教程 579
golang进行简单权限认证的实现

golang进行简单权限认证的实现

使用JWT进行认证 JSON Web Tokens (JWT) are a more modern approach to authentication. As the web moves to a greater separation between the client and server, JWT provides a wonderful alternative...
使用教程 580
Go语言中CGO的使用实践

Go语言中CGO的使用实践

       部门产品业务功能采用Golang开发,但是有些功能是用c写的,比如说net-snmp,bfd协议等等,像这些如果使用GO语言重编的话,既有实现的复杂度也需要相当长的时间,好在GO语言提供了CGO机制,使得能够在go代码中直接调用C的库函数,大大提高了效率,减少了重复开发工作,此外还支持在C语言中调用GO...
使用教程 577
go语言实现mqtt协议的实践

go语言实现mqtt协议的实践

一、什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。 MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占...
使用教程 583