Go语言中文网 为您找到相关结果 184

docker创建例子(go语言)

1. 安装docker -----先有docker环境 2. mkdir myDocker -----新建个文件夹,方便操作 cd myDocker ---进入 Dockerfile写入---新建镜像构造文件,就叫Dockerfile,构造的时候语句会自动执行该名称的构造文件 将golang环境作为父镜像,得先pull一个golang,因为有go的环境才能执行go代码 FROM golang//以go为基础来布置 MAINTAINER Razil "zc6496359" //这就是个名字而已 WORKDIR $GOPATH/src/godocker//go项目得在目录下才能执行就不用说了吧,这个workdir如果找不到该文件夹,就会自己新建一个,这里他自己新建一个 ADD . $GOPATH...阅读全文

博文 2019-08-24 17:32:51 哆啦在这A梦在哪

2018.9.11 从0到1,你准备好了吗?

最近两天又接到一个任务,给一家区块链公司招聘go开发的人才。于是便在一些社区发了招聘帖子,没多久就有人加我微信,立即通过了。对方是一位前端开发工程师,对区块链感兴趣,想转做区块链后端开发,对于这样的转行跳槽者,我觉得她是有勇气的。她跟我了解了区块链行业的人才需求以及薪酬情况,我也一一解答向她了。她还问了我一个问题:你们招区块链培训机构出来的人么?我说:这个和培训机构没关系的,主要看你自己的技术功底的,不过我个人觉得区块链培训机构,目前应该都不是很成熟的,不太建议你去,大部分不太靠谱。她还和我说,听培训机构说有很多hr跟他们要人。我第一感觉就是她被这些机构忽悠了,区块链技术处于起步阶段,大家都还在摸索,并没有完全成熟的模式,他们这些机构哪能一下子掌握呢?这些都是要靠实践才行的,不是去短时间培训...阅读全文

golang 通道channel 基础

声明一个通常的基本语法:channel := make(chan int,0)  当容量为0时,我们可以称通道为非缓冲通道,当容量大于0时,我们称为缓冲通道;  一个通道相当于一个先进先出(FIFO)的队列。也就是说,通道中的各个元素都是严格地按照发送的顺序排列的,先被发送通道的元素值一定会先被接受。元素值的发送和接受都需要用到操作符<-。我们也可以叫它接受操作符。 问:对通道的发送和接受操作都有哪些基本特性? 答: 1.对于同一个通道,发送操作之间是互斥的,接受操作之间也是互斥的。    2.发送操作和接受操作中对元素值的处理都是不可分割的。    3.发送操作在完全完成之前都会被阻塞。接受操作也是如此。 第一个特性:在同一时刻,Go语言的运行时系统只会执行对同一个通道的任意个发送操作中的...阅读全文

博文 2018-09-29 01:34:39 one_zheng

(四)GoLang小记 —— 中文编程

什么,GoLang 也能写中文代码?是的, 你没看错! (编译版本) 请将如下代码复制到您的IDE后直接运行; package main import ( "fmt" ) type 老爸 struct { 力量 string 高大 string } type 老妈 struct { 聪明 string 细心 string } type 儿子 struct { 老爸 老妈 } func main() { var 儿子对象 = 儿子{老爸{"我有力量","我长得高"},老妈{"我很聪明","我很细心"}} fmt.Println("s.力量:",儿子对象.力量) fmt.Println("s.高大:",儿子对象.高大) fmt.Println("s.聪明:",儿子对象.聪明) fmt.Print...阅读全文

博文 2016-10-19 11:00:13 水果糖

青蛙跳台阶 Golang 与 Python 最简解法

「剑指Offer」里的经典题目,近期群里聊到这题,特来复习一波。 题目 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 思路 首先跳到 n 级台阶可以分解为两种情况: 之前跳到 n-1 级台阶,然后再跳 1 级到达 n 级; 之前跳到 n-2 级台阶,然后再跳 2 级到达 n 级; 因此 n 级跳法数量,等于这两种情况之和。 即 F(n) = F(n-1) + F(n-2) 同理可继续推导: F(n-1) = F(n-2) + F(n-3) F(n-2) = F(n-3) + F(n-4) ... F(2) = F(1) + F(0) F(1) = 1 F(0) = 1 可见这是斐波那契数列,数列中从第三个数开始,每个数都是前两个数...阅读全文

博文 2020-03-09 10:32:48 张凯强

垃圾回收(GC)浅谈

关于内存 计算机通过两个机制,去实现内存的高效使用。 第一种机制是虚拟内存。硬盘的容量其实是远远大于内存的(RAM),虚拟内存会在内存不足的时候,把不经常访问的内存的数据写到硬盘里。虽然说硬盘容量比较大,但是它的访问速度却很慢。如果内存和硬盘交换数据过于频繁,处理速度就会下降,计算机就会看上去像卡死了一样,这种现象被叫做抖动(Thrushing)。造成电脑蓝屏的主要原因之一就是抖动。 第二种机制就是垃圾回收(GC)。 虚拟内存的东西在计算机组成原理和操作系统的教科书里有相关的章节去讲。由于内容很多我就不多叙述了。主要来讲一下GC的事情。 GC 之前学习java以及参加java相关的面试,被问到关于相关GC的事情一直很是头疼,看了好多遍还是记不住,脑袋里只有隐隐约约的一些关键字,什么老年代、新...阅读全文

Go 应用的 vendoring utilityManul

Manul 是 Go 应用的 vendoring utility。 **为什么需要 Manul ?** 因为其他的 vendor utilities 有以下缺点: 有些会对 go 的二进制文件和 GOPATH env 变量进行欺骗包装。你将得到一个非 go-gettable 项目,需要额外的软件来编译和运行; 有些将依赖关系的源代码复制到供应商目录中:更新依赖关系需要手动干预,并将大量修改的行直接提交到主仓库;不能通过查看仓库来告诉你的项目使用的依赖关系的版本; 必须在与提交相关联的供应商的附加模糊文件中保留版本。 还有各种架构问题: 不能更新所有或特定的依赖关系; 不能将特定版本的被依赖关系回滚; 不能删除未使用的被依赖关系; 不能锁定版本的 vendored 依赖...阅读全文

golang-101-hacks(12)——copy

注:本文是对golang-101-hacks中文翻译。 内置函数copy定义如下: func copy(dst, src []Type) int 内置函数copy将元素从源切片复制到目标切片。(作为一种特殊情况,它还会将字符串中的字节复制到一个字节片段)切片源和目标可能存在重叠。Copy返回值是copy的总数,即是len(src)和len(dst)的最小值。 看一下基础演示代码,其源切片和目标切片双方不存在重叠 package main import ( "fmt" ) func main() { d := make([]int, 3, 5) s := []int{2, 2} fmt.Println("Before copying (destination slice): ", d) fmt...阅读全文

博文 2019-06-02 00:34:40 羊羽share

jvm垃圾回收算法

前言java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。欢迎学Java和大数据的朋友们加入java架构交流: 855835163群内提供免费的架构资料还有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高...阅读全文

博文 2019-01-27 11:34:48 Java大生

GoLang练习实例100之007----切片COPY

package main import "fmt" //将一个列表的数据复制到另一个列表中 func printSlics(s []int){ fmt.Printf("%v, 长度=%d, cap=%d\n", s, len(s), cap(s)) } func main(){ slice_A := []int{1,2,3,4,5,6,7,8} var slice_B = make([]int,len(slice_A)) //s2 := make([]int, 16) copy(slice_B, slice_A) fmt.Println("打印复制新列表内容") printSlics(slice_B) ...阅读全文

博文 2018-03-26 22:33:05 不折腾难受斯基

nsqjs客户端的部署

因为公司在业务中需要用到消息队列产品,我选用了基于golang开源的nsq产品,记录下我遇到的那些部署中的坑。首先安装nsq,这个没什么好说的,我是直接在官网下载bin文件,直接部署的,环境是centOS 6.7,安装在/opt/nsq-0.3.7.linux-amd64.go1.6目录下;其次是安装nodejs,我安装的是v6.1.0版本,这步也没什么好讲;然后安装nsqjs这个遇到了些坑,这里先记录下1、要看下gcc的版本; $ gcc -v使用内建 specs。 目标:x86_64-redhat-linux 配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bu...阅读全文

博文 2017-02-09 08:21:08 阿修罗王

使用GoAdmin极速搭建golang应用管理后台(二)——自定义登录页面

前面我们介绍怎么快速上手搭建一个管理后台,这一节就介绍一下怎么自定义登录的页面。 框架内置提供了一个登陆界面,但有时候我们想要自定义一个,这时我们需要自定义一个组件去引入。线上的demo的登录页面就是自定义的组件。其代码这里:https://github.com/GoAdminGro...。 我们想要自定义一个登录界面,可以照葫芦画瓢,先将demo的这个登录组件下载下来,放到我们的项目目录下: . ├── login │ ├── Makefile Makefile命令 │ ├── assets │ │ ├── login │ │ │ └── dist 前端资源文件合并 │ │ └── src │ │ ├── css 前端css文件 │ │ └── js 前端js文件 │ ├── assets...阅读全文

博文 2020-04-20 12:32:43 cg33

[golang]slice的坑:从append到共享

go是宣扬实用主义的语言,很多时候都把c中的最佳实践直接规定成语法了。其中之一就是slice,简单但是非常容易踩坑。 先看一个小例子: func main() { a := make([]int, 2, 2) a[0], a[1] = 1, 2 b := append(a[0:1], 3) c := append(a[1:2], 4) fmt.Println(b,c) } 在这个小例子中,原本是希望将a[0:1]作为b的前缀,然后追加上3;将a[1:2]作为c的前缀,然后追加上4。但实际上输出结果并不是原本期望的[1 3] [2 4],而变成了[1 3] [3 4]。这是为什么呢? 我们知道数据结构中数组是非常高效的,可以直接寻址,但是有个缺陷,难以扩容。所以slice被设计为指向数组的指针...阅读全文

博文 2018-09-29 12:34:45 一桶冷水

[译]Go Concurrency Patterns: Pipelines and cancellation - 1

英文原文:https://blog.golang.org/pipelines #### 简介 go语言的并发原语支持使得开发者构建流式数据`pipeline(管道)`变得容易,这些管道可以有效的利用I/O和多cup。本文介绍了这类pipeline的示例,重点介绍了操作失败时出现的细微差别,和如何优雅的处理错误的技术 #### What is a pipeline go语言中没有对`pipeline`正式的定义;`pipeline`只是多种并发模式中的一种。通常而言,`pipeline`是由`channel`连接的一系列阶段,其中每个阶段是由运行相同方法的`goroutine`。在每个阶段中,`goroutine`会完成 - 从`上游channel`接收值 - 对数据进行一些处理,通常会产生新...阅读全文

博文 2020-04-11 23:39:35 TIEDPAG

Golang walkthrough: io package

Golang walkthrough: io package Go是用于处理字节的编程语言。 无论您有字节列表,字节流还是单个字节,Go都可以轻松处理。 从这些简单的原语,我们构建了我们的抽象和服务。 io包是标准库中最基础的包之一。 它提供了一组用于处理字节流的接口和助手。 这篇文章是一系列演练的一部分,可以帮助您更好地了解标准库。 虽然官方的文档提供了大量的信息,但是在现实世界的环境中还是很难理解库的意思。 本系列旨在提供如何在每天应用程序中使用标准库包的上下文。 如果您有任何问题或意见,可以在Twitter上的@benbjohnson与我联系。(当然也可以联系我,listomebao@gmail.com) Reading bytes 字节有两个最基本的操作,读和写。让我们先看如何读字节...阅读全文

博文 2018-01-16 13:39:52 sheepbao.github.io

从golang的垃圾回收说起(上篇)

本文来自网易云社区1 垃圾回收中的重要概念1.1 定义In computer science, garbage collection (GC) is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objects that are no longer in use by the program. Garbage collection was invented by John McCarthy around 1959 to simplify manual memory manage...阅读全文

博文 2018-08-28 18:34:58 yijian2595

vim8 配置NERD tree树形目录插件

vim8配置树目录网上有很多教程,我这边记录一下,备忘:1.下载NERD tree 下载地址是:https://www.vim.org/scripts/s... wget https://www.vim.org/scripts/download_script.php?src_id=23731 这个链接有可能会变化。。 我这里下载的是5.0.0的 加压配置cd ~ll .vim #我这里面没有任何文件mkdir -p .vim/pack/NERD_tree/start/NERD_tree #NERD_tree目录名称要和插件名称保持一致...cd .vim/pack/NERD_tree/start/NERD_tree cp ~/nerd_tree/nerd_tree.zip ./ #将压缩包复...阅读全文

博文 2018-12-12 18:34:47 wangyibo5843

利用Docker部署Golang

1. 安装docker2.mkdir myDocker3.cd myDocker && touch Dockerfile4.Dockerfile写入# 将golang环境作为父镜像FROM golangMAINTAINER Razil "zc6496359"WORKDIR $GOPATH/src/godockerADD . $GOPATH/src/godockerRUN go build main.goEXPOSE 8080ENTRYPOINT ["./main"]参数解释:FROM -> 母镜像 MAINTAINER -> 维护者信息 WORKDIR -> 工作目录 ADD -> 将文件复制到镜像中 RUN -> 执行操作(就跟在终端执行语句一样) EXPOSE -> 暴露端口 ENTRY...阅读全文

博文 2018-08-08 03:34:47 BullShit_8645

不得不知道Golang之sync.Map源码分析

sync.Map源码分析 背景 众所周知,go普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。博主是从golang 1.4开始使用的,那时候map的并发读是没有支持,但是并发写会出现脏数据。golang 1.6之后,并发地读写会直接panic: fatal error: concurrent map read and map write package main func main() { m := make(map[int]int) go func() { for { _ = m[1] } }() go func() { for { m[2] = 2 } }() select {} } 所以需要支持对map的并发读写时候,博主使用两种方法: 第三方类库 conc...阅读全文

博文 2018-07-02 16:55:54 梦朝思夕

GoLang练习实例100之007----切片COPY

##### 将一个列表的数据复制到另一个列表中 ```go package main import "fmt" func printSlics(s []int){ fmt.Printf("%v, 长度=%d, cap=%d\n", s, len(s), cap(s)) } func main(){ slice_A := []int{1,2,3,4,5,6,7,8} var slice_B = make([]int,len(slice_A)) //s2 := make([]int, 16) copy(slice_B, slice_A) fmt.Println("打印复制新列表内容") printSlics(slice_B) ...阅读全文

sync.Map源码分析

# sync.Map源码分析 ## 普通的map go普通的map是不支持并发的,例如简单的写 ```go func main() { wg := sync.WaitGroup{} wg.Add(10) m := make(map[int]int) for i := 0; i < 10; i++ { go func(i int) { m[i] = i wg.Done() }(i) } wg.Wait() } ``` ```bash fatal error: concurrent map writes ``` ## sync.Map go的sync.Map几个优化点 * 通过使用优先读的结构体read减少锁的冲突 * 使用双重检测 * 使用延迟删除(删除存在于read中的数据只是将其置为nil...阅读全文

博文 2018-06-07 10:14:00 chasiny

go语言

Go 语言环境安装 下载 go语言直接下载下载不动,我先下载了Lantern,安装完Lantern 后会自动打开浏览器 然后把要下载的go(https://golang.org/dl/)语言地址复制到lantern 所在的地址下载就可以下载了。 安装 双击运行安装程序 点击next ,选择安装路径,最后安装完成。 配置环境变量 “新建”系统变量:设置变量名GOROOT,变量值D:\Soft\Go(安装目录) 修改系统变量Path,添加D:\Soft\Go\bin 通过cmd查看是否安装成...阅读全文

博文 2018-03-25 01:31:00 yanzi9016

如何从单独的容器调试运行中的Docker容器

容器非常适合封装软件,但是有时一味地改造容器镜像以使其尽可能小时,您可能走得太远。我们需要在“简洁”的镜像和无法调试的镜像之间找到很好的平衡。 看到人们调试正在运行的容器的正常方法是docker exec -it $ CONTAINER sh并根据需要在容器中安装调试工具。但是,如果您的容器没有/ bin / sh怎么办?如果没有包管理器怎么办?您可以使用docker cp将实用程序复制到容器中,然后将exec复制到正在运行的容器中,但这也很麻烦。 因此,一个朋友最近没有询问如何从容器中进行调试,而是询问如何从其他容器中进行调试。我没有那么聪明,所以我在网上问了很多聪明的人,并得到了很好的答复。 我们创建一个只有caddy的精简容器。 首先下载/提取caddy二进制文件 $: curl ht...阅读全文

博文 2019-10-19 19:32:54 iyacontrol

Go module 使用说明

go modules 是 golang 1.11 新加的特性。 1、设置go mod GO111MODULE GO111MODULE 有三个值:off, on和auto(默认值)。 GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。 GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。 GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形: 当前目录在GOPATH/src之外且该目录包含go.mod文件 当前文件在包含go.mod文件的目录下面。 当modules 功能启...阅读全文

博文 2020-03-21 16:32:45 whoam1_python

linux安装golang

系统命令安装 yum install go 手动下载配置 访问golang中国 下载最新版本 wget http://golangtc.com/static/go/go1.5rc1/go1.5rc1.darwin-amd64.tar.gz 配置环境变量 打开/etc/profile文件 export GOPATH=/usr/local/go export PATH=$GOPATH/bin:$PATH 编译profile文件,使之立即生效 source /etc/profile 检测go安装成功与否 go version 源码编译安装 下载go1.4二进制编译器 访问下载地址找到对应系统的1.4压缩包,下载后解压并复制到user目录下命名为go1.4 从Github获取源码 $ git clo...阅读全文

博文 2017-07-01 17:04:05 buglife

Golang 入门 : 数组

数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。 本文将介绍 Golang 数组的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 Golang 数组的特点 我们可以把 Golang 数组的特征归纳为以下三点: 固定长度:这意味着数组...阅读全文

博文 2019-04-15 12:34:41 菜鸟飞不动

Golang 使用 protobuf 的教程

1、下载protobuf的编译器protoc 网站:https://github.com/google/protobuf/releases 选择各自平台的版本下载window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOROOT/bin下,GOROOT/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exelinux: 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip 解压,把bin目录下的protoc复制到GOROOT/bin下,GOROOT/bin加入环境变量。 如果喜欢编译安装的,也可下载源码自行安装,最后...阅读全文

博文 2020-01-20 17:32:43 佳闯天涯

Go channel实现源码分析

go通道基于go的并发调度实现,本身并不复杂,go并发调度请看我的这篇文章:go并发调度原理学习 1.channel数据结构 type hchan struct { qcount uint // 缓冲区中已有元素个数 dataqsiz uint //循环队列容量大小 buf unsafe.Pointer // 缓冲区指针 elemsize uint16 //元素大小 closed uint32 //关闭标记,0没关闭,1关闭 elemtype *_type //数据项类型 sendx uint //发送索引 recvx uint //接收索引 recvq waitq //等待接收排队链表 sendq waitq //等待发送排队链表 lock mutex //锁 } type waitq s...阅读全文

Go基础学习记录之阻止Session劫持(Preventing session hijacking)

阻止Session劫持(Preventing session hijacking) Session劫持是一种常见且严重的安全威胁。在与服务器通信时,客户端使用Session ID进行验证和其他目的。不幸的是,恶意第三方有时可以跟踪这些通信并找出客户端Session ID。本次分享,将向您展示如何为教育目的劫持Session。 Session劫持过程 以下代码是count变量的计数器: // WelcomeLogin 欢迎登录页 func WelcomeLogin(w http.ResponseWriter, r *http.Request) { session, err := appSession.SessionStart(w, r) if err != nil { fmt.Fprintf(...阅读全文

博文 2018-11-06 14:34:44 DurbanZhang

go modules 的一些细节

前言 在一些Java的项目中,有 Maven等这些版本管理工具,可以很好的管理各种版本依赖关系,但是在 Golang 的项目中,之前官方并没有提供版本管理工具,以前都是用 go get 进行安装, 随着项目的变大, 就处理这种依赖关系就变得很麻烦, 原文 如果你对Go感兴趣, 可以关注我的公众号: GoGuider vendor 机制 为了解决版本依赖问题, 官方出了一个 vendor 机制,将项目依赖的包都放在该目录中,但这也并没有很好地管理依赖的版本。 因为vendor 机制有几个大的问题: 1、需要将外部库放到项目中, 导致项目体积变得很大 2、项目版本很难指定和控制 go dep 和 go modules 之后官方出了一个准官方版本管理工具 go dep,这也算是 go module...阅读全文

用Go实现冒泡排序、选择排序和快速排序的运行效率

//环境和语言版本:go version go1.13 windows/amd64/********************************代码如下:*****************************************/package mainimport ( "fmt" "math/rand" "time")func main() { // b := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} // b2 := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} // // b3 := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} //...阅读全文

博文 2020-02-11 17:56:29 whalert

关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT7,OBJECT8, 我们需要将这些数据缓存到这4台服务器上,相应的问题是 如何设计数据存放策略?即ObjectX 应该存放在哪台服务器上? 为了解决这个问题,我们有如下几个思路。 1. 余数hash方案 采用hash(Objectx)%4来确定服务器节点 假设 hash(OBJECT1)=2,由 2%4=2,可知,Object1则应该存放到节点N2上 假设 hash(OBJECT2)=3,由 3%4=3,可知,Object2则应该存放到节点N3上 假设 hash(OBJECT3)=1,由 1%...阅读全文

博文 2019-08-24 01:32:49 非正式解决方案

风中的 FAQ-2

51.go modules依赖管理 简介 一般从GOPATH、vendor文件夹下寻找依赖包。使用该功能后根据go.mod文件中的记录下载依赖。 go.mod中使用//作为注释 module:定义当前模块和包路径 require:定义依赖的模块和版本 exclude:排除特定模块和版本的使用 replace:模块源的替换 使用 go get xxx会自动将依赖模块添加到go.mod文件中 网络访问不了golang.org/x等谷歌扩展包,可以使用replace replace ( golang.org/x/crypto => github.com/golang/crypto latest golang.org/x/sys => github.com/golang/sys latest ) g...阅读全文

博文 2019-07-12 14:32:44 我就是小政政

通过例子学习 Go 和 Rust ---- IO Reader

IO操作是咱编程时经常会遇到的,两种语言都提供了通用的Read方法,可以让咱从reader结构体里面读出数据。 Go //io/io.go type Reader interface { Read(p []byte) (n int, err error) } //bytes/reader.go type Reader struct { s []byte i int64 // current reading index prevRune int // index of previous rune; or < 0 } // Read implements the io.Reader interface. func (r *Reader) Read(b []byte) (n int, err er...阅读全文

博文 2020-03-05 12:32:42 Tericoder