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

GO 语言接口与结构体 - interface & struct

interface & struct 接口与结构体 以继承为特点的 OOP 只是编程世界的一种抽象方式,在 Golang 的世界里没有继承,只有组合和接口,并且是松散的接口结构,不强制声明实现接口,这看起来更符合 Java 之父 Gosling 的设想。 If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. 翻译过来就是:如果某个东西长得像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那它就可以被看成是一只鸭子。 单一继承关系解决了 is-a 也就是定义问题,因此可以把子类当做父类来对待。但对于父类不同但又具有某些共同行为的数据,单一继承就不能解决了,C++ 采...阅读全文

博文 2019-08-02 22:32:40 坚果jimbowhy

Go 代码重构:23 倍性能提升!

要说写代码是每位程序员的使命,那么写优秀的代码则是每位程序员的底线。本文作者分享基于 Go 语言的代码重构,使得性能提升 23 倍的快速方法。以下为译文:几周前,我读了一篇名为“Go 语言中的好代码与差代码”(https://medium.com/@teivah/good-code-vs-bad-code-in-golang-84cb3c5da49d)的文章,作者一步步地向我们介绍了一个实际业务用例的重构。文章的主旨是利用 Go 语言的特性将“差代码”转换成“好代码”,即更加符合惯例和更易读的代码。但是它也坚持性能是项目重要的方面。这就引起了我探索的好奇心:让我们深入看看!1这篇文章里的程序基本上就是读取输入文件,然后解析每一行并存储到内存的对象中。作者不仅在 Github 上发布了他的代码...阅读全文

博文 2018-07-11 14:20:16 Val Deleplace

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行。现在总结各个资料,从个人理解上说明下 进程 线程 轻量级进程 协程 go中的goroutine 那些事儿。 一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改...阅读全文

博文 2014-10-04 19:26:52 shenguanpu

在 Go 语言中,正确的使用并发

Glyph Lefkowitz最近写了一篇启蒙文章,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这是一篇非常好的文章,现代软件工程应该拥有的丰富智慧。 从多个花絮中提取,但是如果我斗胆提出主要观点的总结,其内容就是:抢占式多任务和一般共享状态结合导致软件开发过程不可管理的复杂性, 开发人员可能更喜欢保持自己的一些理智以此避免这种不可管理的复杂性。抢占式调度对于哪些真正的并行任务是好的,但是当可变状态通过多并发线程共享时,明确的多任务合作更招人喜欢 。 漠天翻译于 6 个月 前 1人顶 顶 翻译的不错哦! 尽管合作多任务,你的代码仍有可能是复杂的,它只是有机会保持可管理下一定的复杂性。当控制转移是明确一个代码阅读者至少有一些可见的迹...阅读全文

博文 2014-10-10 08:00:02 漠天, LeoXu, 赵亮-碧海情天

进程、线程、轻量级进程、协程与 go 的 goroutine【转载+整理】

本文内容 进程 线程 协程 Go 中的 goroutine 参考资料 最近,看一些文章,提到“协程”的概念,心想,进程,线程,协程,前两个很容易,任何一本关于操作系统的书都有说,开发时也经常用,但是协程呢?之前也遇到这个词,但是今天,查了一下资料。下面是一个人的总结。 电话面试被问到go的协程……虽然用 python 时候在 Eurasia 和 eventlet 里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行。现在总结各个资料,从个人理解上说明下进程、线程、轻量级进程、协程,以及 go 中的 goroutine 那些事儿。 进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行...阅读全文

博文 2015-10-14 03:00:01 liuning8023

+jiayouya01可以交换51cto有想学习的吗

图片发自简书App 51cto学院微职位 Golang开发工程师51cto学院微职位人工智能工程师标准化课程51CTO学院大数据微职位 (基础+提升班级)全套 51CT0大数据全套教程从官方例程深度学习海思SDK及API-第211季视频课程海思平台上USB WIFI的移植与局域网无线调试和视频流预览-第511季视频课程全面认识海思SDK及嵌入式层开发-第111季视频课程图像sensor的特性和驱动解析视频教程-第411季ORTP库局域网图传和VLC实时预览-第311季视频课程老段带你学Perl视频课程零基础:21天搞定Python分布爬虫全全面认识海思SDK及嵌入式层开发-第111季视频课程深度解剖dubbo源码数据结构实战完全手册视频课程c++从入门到精通 c++111417c++对象模型...阅读全文

基于andlabs的ui库,使用xml布局来替代手动创建

目前使用到的[andlabs的ui库](https://github.com/andlabs/ui)为[本人自己维护的一个版本](https://github.com/ying32/ui),由于个人能力及精力有限,只保留了Mac OS X版本的代码。当然如果要支持其它平台也是很容易移植的,只需要稍微改动即可。 #### 使用例程 **xml布局文件** ```xml ...阅读全文

Golang标准库深入 - 锁、信号量(sync)

概述 sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。 本包的类型的值不应被拷贝。 虽然文档解释可能不够深入,或者浅显易懂,但是我觉得还是贴出来,对比了解可能会更好。 Go语言中实现并发或者是创建一个goroutine很简单,只需要在函数前面加上"go",就可以了,那么并发中,如何实现多个goroutine之间的同步和通信?答: channel 我是第一个想到的, sync, 原子操作atomic等都可以。 首先我们先来介绍一下sync包下的各种类型。那么我们先来罗列一下sync包下所有的类型吧。 1. Cond 条件等待 type Cond struct { // L is held...阅读全文

博文 2018-05-17 23:33:04 90design

Plan9汇编语言备查

Plan9汇编语言备查 2013-02-21 本文源于对A Manual for the Plan 9 assembler的部分翻译 机器 这个汇编语言可以用于MIPS,SPARC,Intel 386,Intel 960,AMD 29000,Motorola 68020和68000, Motorola Power PC,AMD64,DEC Alpha,ARM. 寄存器 汇编语言中所有预定义的符号都是大号的.数据寄存器是R0到R7;地址寄存器是A0到A7; 浮点寄存器是F0到F7。 A6寄存器是供C编译器使用的,用于指向数据。A6寄存器是常量,必须在C程序初始化时 设置成外部定义的符号地址。 接着是硬件寄存器,比如在68020中的:CAAR,CACR,CCR,DFC,ISP,MSP,SFC,S...阅读全文

博文 2016-07-20 12:12:14 zenlife

golang非阻塞锁的简单实现

对于复杂类型如 container/list ,需要在所有读写操作上使用 sync.mutex 互斥锁以保证数据一致性,互斥锁并发情况下,Lock 操作会阻塞,一直等到其他线程Unlock,但是有的时候因为有一个耗时比较长的操作一直占用锁,我们想让其他线程不在Lock上一直阻塞,而是直接走其他业务流程。 举一个很简单的场景:在多人并发抽奖环节,为了保证不出现负库存,我们可以通过竞争锁,第一个获取锁的人可能中奖,而其他并发过来的请求获取锁失败(而不是一直阻塞在Lock()),直接当做未中奖处理。 思考了一下,有一个思路,我们可以用两道锁,第一道锁用来判断锁状态,第二道锁才是真正的耗时任务用的锁。 直接上代码 type NBLocker struct{ l1 sync.Mutex l2 sync...阅读全文

博文 2017-04-04 05:00:47 吾爱

Go语言,编译时不生成bin目录的原因

今天照着例程想把工程管理好好研究下,忽然发现怎么都不自动生成bin目录,google半天,发现这篇文章 https://golang.org/doc/code.html 原来是GOBIN环境变量的问题,如果设置了这个环境变量,则不生成bin目录,可执行文件都存到GOBIN里了,删去,再试,ok了。 还是有必要把google的文档好好吃透下...阅读全文

博文 2015-06-17 23:02:26 zha_stef

Go 语言的 Gearman API

学习 Go 已经有一段时间了,关于《学习Go语言》的翻译进度一如既往的像之前一样缓慢。每当翻译到一处,看到 Go 语言那精妙的设计的时候,就会忍不住想写点什么。好吧,其实我之前的计划是写一个自己用的proxy,不过还是算了吧,原因大家都懂。轮子造太多,没意思。 在整理一些之前的技术架构和思考新的架构的过程中,一次又一次提高了 Gearman 在系统中的重要性。虽然基于“新项目用老技术,老项目用新技术”的原则,并不打算在新的项目中使用 Golang。不过,总会有一天新项目要变成老项目吧?总会有一天,老项目需要做一些调整吧?理由牵强了点,但总是给自己找到了一个做的理由。 于是就有了这个:http://bitbucket.org/mikespook/gearman-go 最初构思的版本是对成熟的 ...阅读全文

博文 2014-10-09 16:15:38 mikespook

[翻译]无聊的 Golang

这篇文章虽然不长,但是很有趣。看到好几天了,一直都没空翻译。抽空翻译出来,这应当算是英文“标题党”和“高级黑”吧。 原文不好读,也没什么特别的;不过如果是为了强化学习 Golang 的信心,值得看看。 原文在此:http://aeronotix.pl/blog/go-is-boring —————-翻译分隔线—————- 无聊的 Golang Go 没什么新鲜的,也没什么特别的。你在看到 Go 之前都遇到过了。是的,我也是这么认为的。不过你所没见过的是所有这些都集中在一个语言中,产生了一个 TMD 超级有用的核心。 你之前已经用过 channel 了,很酷吧。纯粹为了获得那么一点点的性能提升就用在各个地方,并且期望能够在新语言中集成。你精通线程、携程、actor、future 和 promi...阅读全文

博文 2014-10-09 16:17:00 mikespook

golang并发编程goroutine+channel(一)

go语言的设计初衷除了在不影响程序性能的情况下减少复杂度,另一个目的是在当今互联网大量运算下,如何让程序的并发性能和代码可读性达到极致。go语言的并发关键词 "go" go dosomething() //走,兄弟我们搞点事情 案例一:并发编程 func say(s string) { fmt.Printf("%s say\n", s) } func main() { go say("lisi") say("zhangsan") } 执行结果 zhangsan say 上面的案例执行了2次say方法,但只有zhangsan执行成功了。原因是因为lisi是开了一个goroutine去执行,还没执行完但此时的main函数已经退出了。 案例二:并发编程 lisi估计是有点害羞,说话语速比较慢,因此...阅读全文

博文 2017-11-30 16:00:00 nickchou

基于 Flow 的 Go(Golang)编程微框架 flowbase

基于 Flow 的 Go(Golang)编程微框架。 FlowBase 的目的,是就在Golang现有FBP状primives的顶部 提供 刚好 足够的功能 , 而不只是作为一个全面的框架 (具有有界缓冲剂,异步去例程信道),以使开发数据处理应 用它。 因此,术语为“FBP微框架”。 该模式之前已经在   [GopherAcademy](https://gopheracademy.com/)下面的博客文章中描述: * [Patterns for composable concurrent pipelines in Go](https://blog.gopheracademy.com/composable-pipelines-pattern/) * [...阅读全文

百万请求一分钟,Golang 轻松来搞定

文记录: http://www.codedata.cn/hackne... 我在反广告、杀病毒、检木马等行业的不同软件公司里已经工作 15 年以上了,非常了解这类系统软件因每天处理海量数据而导致的复杂性。 目前我作为 smsjunk.com 的 CEO 和 KnowBe4 的主架构师,在这两个网络安全领域的公司里工作。 有趣的是,在过去的 10 年里,作为软件工程师,我接触到的 web 后端代码大多是用 Ruby on Rails 开发的。请不要误会,我很喜欢 Ruby on Railds 框架,而且我认为它是一套令人称赞的框架,不过时间一长,你就会习惯于使用 ruby 语言的方式思考和设计系统,会忘记利用多线程,并行化,快速执行和小的内存消耗,软件架构本可以如此高效且简单。很多年来,我也是...阅读全文

博文 2018-02-28 19:34:39 easyhappy

Go语言很好很强大,但我有几个问题想吐槽

作者 | Ben Boyter 译者 | 老夫子 Go 是一门非常不错的编程语言,并且逐渐取代 Python 成为很多人的首选语言。但它也有一些缺点让很多开发者忍不住吐槽,比如它在函数式编程、通道 / 并行切片处理、内存垃圾回收、错误处理等方面都有一些问题。本文作者将 Go 存在的“硬伤”设计记录了下来,与大家分享、讨论。 Go 是一门非常不错的编程语言。然而,我在公司的 Slack 编程频道中对 Go 的抱怨却越来越多(猜到我是做啥了的吧?),因此我认为有必要把这些吐槽写下来并放在这里,这样当人们问我抱怨什么时,我给他们一个链接就行了。先声明一下,在过去的一年里,我大量地使用 Go 语言开发命令行应用程序、scc、lc 和 API。 其中既有供客户端调用的大规模 API,也有即将在 htt...阅读全文

博文 2019-04-09 14:43:28 InfoQ

【Kotlin学习日记】Day2:语法糖_1

大家好,欢迎加入小李君的Kotlin学习之旅。今天是小李君学习Kotlin的第二天,本文将简述Kotlin语法糖,let‘s do it。 昨日回顾: 访问官网https://kotlinlang.org 点击learn,看Tutorial 文档 在Jetbrain IDEA上新建工程,写main函数,打印Hello World,运行程序 今日内容: 访问官网https://kotlinlang.org/docs/reference/ ,快速看完Overview 直接进入阅读Getting Started - Basic Syntax 练习 Basic Syntax 上的例程 第一步: 看看Overview,并暂且忽略它。 小李君认为,在学习的初期,仔细研读Overview的经文,是很难有深...阅读全文

博文 2017-06-15 16:06:55 白云山小李君

在 Go 语言中,正确的使用并发

Glyph Lefkowitz最近写了一篇 启蒙文章 ,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这是一篇非常好的文章,现代软件工程应该拥有的丰富智慧。 从多个花絮中提取,但是如果我斗胆提出主要观点的总结,其内容就是:抢占式多任务和一般共享状态结合导致软件开发过程不可管理的复杂性, 开发人员可能更喜欢保持自己的一些理智以此避免这种不可管理的复杂性。抢占式调度对于哪些真正的并行任务是好的,但是当可变状态通过多并发线程共享时,明确的多任务合作更招人喜欢 。 尽管合作多任务,你的代码仍有可能是复杂的,它只是有机会保持可管理下一定的复杂性。当控制转移是明确一个代码阅读者至少有一些可见的迹象表明事情可能脱离正轨。没有明确标记每个新阶段是潜...阅读全文

博文 2014-10-10 20:00:00 LvanNeo

go语言

看了云风的博客,知道go语言大概是 google公司推出的一种新语言,带有gc功能,和string类等。先尝试用下,有时间再去研究下语法和大概的实用性。下面转帖一些go语言在window系统的使用方法。 两个多月前的时候谷歌公司发布了go语言,大概的看了一下,发现还不支持Windows系统,发了个帖子问了一下,大家的建议基本上都是不要去接触。再加上本人搞程序不久还是个菜鸟,所以这个事就这么搁置了。 今天早晨在je上看帖子,发现go好像支持Windows了,于是就索性一顿找资料,最终算是正确的安装了go语言的环境,并且成功的运行了一个示例程序。下边就安装和运行全过程做一介绍,供那些准白开始初探go的朋友参考,也希望各位高手给予在下在学习方面的建议。 第一步:下载安装程序。通过http://co...阅读全文

博文 2014-10-04 19:25:59 cyblueboy83

为什么go语言还没有火起来?go语言有哪些劣势?

Go 是一门非常不错的编程语言,并且逐渐取代 Python 成为很多人的首选语言。但它也有一些缺点让很多开发者忍不住吐槽,比如它在函数式编程、通道 / 并行切片处理、内存垃圾回收、错误处理等方面都有一些问题。本文作者将 Go 存在的“硬伤”设计记录了下来,与大家分享、讨论。Go 是一门非常不错的编程语言。然而,我在公司的 Slack 编程频道中对 Go 的抱怨却越来越多(猜到我是做啥了的吧?),因此我认为有必要把这些吐槽写下来并放在这里,这样当人们问我抱怨什么时,我给他们一个链接就行了。 先声明一下,在过去的一年里,我大量地使用 Go 语言开发命令行应用程序、scc、lc 和 API。 其中既有供客户端调用的大规模 API,也有即将在 https://searchcode.com/ 使用的 ...阅读全文

博文 2019-04-11 19:34:42 QFdongdong

golang调用windows外部程序,并获取输出和返回值

一个常见的例程,作个记录。要点在注释里有。 代码: package main import ( "fmt" "os/exec" "runtime" "syscall" ) func main() { cmd := exec.Command("cmd.exe", "/c", "D:\\docker\\kubectl.exe", "version") if runtime.GOOS == "windows" { cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} } //Start执行不会等待命令完成,Run会阻塞等待命令完成。 //err := cmd.Start() //err := cmd.Run() //cmd.Output(...阅读全文

博文 2020-05-05 13:32:42 万州客

进程、线程、轻量级进程、协程和go中的Goroutine

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行。现在总结各个资料,从个人理解上说明下 进程 线程 轻量级进程 协程 go中的goroutine 那些事儿。 一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说...阅读全文

博文 2016-05-26 10:00:05 Leo_wl

go语言学习1.7

2014年准备学习一下go,毕竟是大牛ken tompson参与的项目,了解一下。 买了一本《go语言程序设计》,今天读了第一章,对1.7节的并发方式毕竟感兴趣 特点总结: 1. 大部分情况下无需显示锁 2. goroutine可以有很多 3.channel通道传递数据,代替了共享数据 运行了一下例程polar2cartesian,效果还不错,但是有个问题一直不能解决。 输入终止为ctrl+Z, 但反复测试都不能退出循环,只能用ctrl+C退出了 相关代码: if runtime.GOOS == "windows" { prompt = fmt.Sprintf(prompt, "Ctrl+z, Enter") } else { prompt = fmt.Sprintf(prompt, "Ct...阅读全文

博文 2016-03-02 18:00:01 hb_zxl

第一次尝试go语言

两个多月前的时候谷歌公司发布了go语言,大概的看了一下,发现还不支持Windows系统,发了个帖子问了一下,大家的建议基本上都是不要去接 触。再加上本人搞程序不久还是个菜鸟,所以这个事就这么搁置了。 今天早晨在je上看帖子,发现go好像支持Windows了,于是就索性一顿找资料,最终算是正确的安装了go语言的环境,并且成功的运行了一个示例程 序。下边就安装和运行全过程做一介绍,供那些准白开始初探go的朋友参考,也希望各位高手给予在下在学习方面的建议。 第一步:下载安装程序。通过http://code.google.com/p/go-windows/去下载基于Windows的安装程序。下载完打开 压缩包里会有两个文件夹:bin和pkg。 第二步:程序安装。程序的安装非常简单,只需将程序解压放到...阅读全文

博文 2014-10-04 19:26:18 horseroad

进程、线程、轻量级进程、协程和go中的Goroutine

一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 二、线程 书中的定义:线程是进程的一个执行流,独立执行它自己的程序代码。 维基百科:线程(英语:thread)是操作系统能够进行运算调度的最小单位。 线程上下文一般只包含CPU上下文及其他的线程管理信息。线程创建的开销主要取决于为线程堆栈的建立而分配内存的...阅读全文

博文 2016-06-03 10:00:00 tangchuanyang

Golang学习(12)——regex包

Golang学习 - regexp 包------------------------// 函数// 判断在 b(s、r)中能否找到 pattern 所匹配的字符串func Match(pattern string, b []byte) (matched bool, err error)func MatchString(pattern string, s string) (matched bool, err error)func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)// 将 s 中的正则表达式元字符转义成普通字符。func QuoteMeta(s string) string-------...阅读全文

博文 2017-02-10 10:19:39 1160636144

并发编程

Go 语言简介(下)— 特性 并发不是并行 Go负载均衡 一个Go例程(Goroutines)就是一个和其它Go例程在同一地址空间里但却独立运行的函数,就像是在shell里使用 & 标记启动一个命令。 Goroutine 的并发安全性 无论是 Windows 还是 Linux,基本上来说是用操作系统的线程来实现的,不过,Goroutine不是线程。它有个特性,如果当一个Go例程阻塞时,所在的线程会阻塞,但其它Go例程不受影响,多个例程可以在系统线程上做多路通信。堆栈初始很小,但随着需求会增长或收缩,Go例程不是不耗资源,但它们很轻量级的。这并不是真正的并发,如果你要真正的并发,你需要在你的 main 函数的第一行加上下面的这段代码: import "runtime" ... runtime....阅读全文

博文 2017-03-05 19:45:40 紫若丹枫

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 二、线程 书中的定义:线程是进程的一个执行流,独立执行它自己的程序代码。 维基百科:线程(英语:thread)是操作系统能够进行运算调度的最小单位。 线程上下文一般只包含CPU上下文及其他的线程管理信息。线程创建的开销主要取决于为线程堆栈的建立而分配内存的...阅读全文

博文 2016-11-02 04:00:03 gaox587

GO语言学习-方法和接口

方法: 指包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。 例: type Food struct{ color string taste string } func ( fruit Food) Eat() string { return fmt.Sprintf("%v,%v)", fruit.color, fruit.taset) } Food为结构体类型,Eat为Food类型的方法, Eat方法的接受者是Food类型的值(或指针 func ( fruit * Food) Eat() string)。 apple := Food{"red", "sweet"} 或 apple := &Food{"red", "sweet"} 方法使用 apple.Eat() ...阅读全文

博文 2015-06-17 23:02:27 phlong999

golang(cgo)---如何在两个不同的package中使用同样的自定义数据类型?

如何在两个不同的package中使用同样的自定义数据类型?这里主要针对包括在C头文件中结构体类型,如果只是在不同的go package中自定义数据类型,这个很好处理。但实际上处理的核心是一样的,下面通过两个例子来说明解决办法。 测试例程目录 ├── include │ └── data.h └── src ├── common │ └── common.go └── main └── main.go 测试 data.h #pragma once #include struct Data { int a; char b; }; common.go package common /* #include #cgo CFLAGS : -I../../inclu...阅读全文

博文 2016-09-01 17:00:07 FreeApe

golang(cgo)---如何在两个不同的package中使用同样的自定义数据类型?

如何在两个不同的package中使用同样的自定义数据类型?这里主要针对包括在C头文件中结构体类型,如果只是在不同的go package中自定义数据类型,这个很好处理。但实际上处理的核心是一样的,下面通过两个例子来说明解决办法。 测试例程目录 ├── include │ └── data.h └── src ├── common │ └── common.go └── main └── main.go 测试 data.h #pragma once #include struct Data { int a; char b; }; common.go package common /* #include #cgo CFLAGS : -I../../inclu...阅读全文

博文 2016-09-10 03:00:02 FreeApe

go语言实现聊天服务器

看了两天 go 语言,是时候练练手了。go 的 routine(例程) 和 chan(通道) 简直是神器,实现多线程(在 go 里准确的来说是 多例程)简直不要太轻松。 于是动手码了一个傻瓜版的黑框聊天器。 server 端:监听 TCP 连接;支持自定义客户端命令;支持消息分发;理论上支持广播;... package main import ( "fmt" "net" "io" "strconv" "time" "strings" ) const ( NORMAL_MESSAGE = iota LIST_MESSAGE ) var clientSenders = make(map[string] chan string) func send (addr string, conn *net....阅读全文

博文 2018-08-09 21:34:46 Y_xx

Go语言很好很强大,但我有几个问题想吐槽

作者 | Ben Boyter译者 | 老夫子Go 是一门非常不错的编程语言,并且逐渐取代 Python 成为很多人的首选语言。但它也有一些缺点让很多开发者忍不住吐槽,比如它在函数式编程、通道 / 并行切片处理、内存垃圾回收、错误处理等方面都有一些问题。本文作者将 Go 存在的“硬伤”设计记录了下来,与大家分享、讨论。Go 是一门非常不错的编程语言。然而,我在公司的 Slack 编程频道中对 Go 的抱怨却越来越多(猜到我是做啥了的吧?),因此我认为有必要把这些吐槽写下来并放在这里,这样当人们问我抱怨什么时,我给他们一个链接就行了。先声明一下,在过去的一年里,我大量地使用 Go 语言开发命令行应用程序、scc、lc 和 API。 其中既有供客户端调用的大规模 API,也有即将在 https:...阅读全文

博文 2019-04-08 14:35:16 qq5ac46f12063af

Golang学习(4)——strings包

Golang学习 - strings 包--------------------strings 包与 bytes 包中的函数用法基本一样,不再赘述。 只对 Replacer 进行说明。// 转换func ToUpper(s string) stringfunc ToLower(s string) stringfunc ToTitle(s string) stringfunc ToUpperSpecial(_case unicode.SpecialCase, s string) stringfunc ToLowerSpecial(_case unicode.SpecialCase, s string) stringfunc ToTitleSpecial(_case unicode.Specia...阅读全文

博文 2017-02-09 18:26:14 1160636144

零基础学c语言如何开始

如果是想通过计算机等级考试 就买一本全国计算机等级考试二级试题认真做就可以了 当然也要加强上机实践。 怎样才能学好C语言 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的indows, Unix, Linux, Mac, os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。 第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些...阅读全文

博文 2019-01-17 17:50:09 wenpeng231

亲测可用的golang sql例程与包管理

sqlite与golang package main import ( "database/sql" "fmt" "time" _ "github.com/mattn/go-sqlite3" ) func main() { //打开数据库,如果不存在,则创建 db, err := sql.Open("sqlite3", "./foo.db") checkErr(err) //创建表 sql_table := ` CREATE TABLE IF NOT EXISTS userinfo( uid INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(64) NULL, departname VARCHAR(64) NULL, created DA...阅读全文

博文 2017-11-14 12:00:05 peterinblog

使用 Go 优化我们的接口

标题起的是有点大,不过还好本片文章主要也是使用 Go 来优化 HTTP 服务的,也算打个擦边球吧~ 背景 特征数据暴增,导致获取一个城市下所有的特征的接口延时高,下面是监控上看到的接口响应耗时,最慢的时候接口响应时间能达到 5s 多。 缓存优化方案 代码优化思路: 1,使用缓存。 1.1为什么使用内存,而不是 Redis? 分析业务需求,当前需要存储起来的数据是ObjectId,ObjectId 是一个长度为14左右的字符串,我们假设平均下来ObjectId是长度为16的字符串,这样算下来就是每个 ObjectId 占用的内存大小是2个字节,当前业务需要存储的ObjectId大概是30万条,这样算下来当前业务需要存储的 ObjectId 要占用的内存在 0.5M 完全可以在内存中进行操作。相...阅读全文

博文 2019-12-30 20:34:29 haifeiWu

Golang 介绍及踩坑系列之四

这篇坑文来自最近的一件趣事。我认识一位非常精通golang编程技巧的工程师。他/她经验丰富,擅长各种解决工程问题的技法,对系统了解也极为深入。遇到golang的实战问题,他/她往往可以一语中的,谈笑间bug灰飞烟灭。这么一位值得尊敬的工程师,在别人问他golang的goroutine是个啥玩意的时候,他/她瞠目结舌,不知道该怎么跟对方解释好,居然说:“goroutine就有点像java的线程池啦。”excuse me!这也太狗屁不通了吧!所以我觉得,我来装出一副我比他/她更懂的姿态,给大家科普一下什么是goroutine。对goroutine了如指掌的同学请绕行。那到底啥是goroutine捏?要了解啥是goroutine,我们得先了解啥是coroutine。(不了解coroutine的同学...阅读全文

博文 2018-08-12 18:10:31 Chang

Golang学习(7)——sync包

Golang学习 - sync 包--------------------临时对象池 Pool 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要的时候取出来重复使用,目的是为了避免重复创建相同的对象造成 GC 负担过重。其中存放的临时对象随时可能被 GC 回收掉(如果该对象不再被其它变量引用)。 从 Pool 中取出对象时,如果 Pool 中没有对象,将返回 nil,但是如果给 Pool.New 字段指定了一个函数的话,Pool 将使用该函数创建一个新对象返回。Pool 可以安全的在多个例程中并行使用,但 Pool 并不适用于所有空闲对象,Pool 应该用来管理并发的例程共享的临时对象,而不应该管理短寿命对象中的临时对象,因为这种情况下内存不能很好的分配,这些短寿命对象应该自己实现空...阅读全文

博文 2017-02-09 18:26:31 1160636144

再谈谈获取 goroutine id 的方法

去年年初的时候曾经写过一篇关于如何获取goroutine id的方法: 如何得到goroutine 的 id?, 当时调研了一些一些获取goid的方法。基本的方法有三种: 通过Stack信息解析出ID 通过汇编获取runtime·getg方法的调用结果 直接修改运行时的代码,export一个可以外部调用的GoID()方法 每个方式都有些问题, #1比较慢, #2因为是hack的方式(Go team并不想暴露go id的信息), 针对不同的Go版本中需要特殊的hack手段, #3需要定制Go运行时,不通用。当时的petermattis/goid提供了 #2 的方法, 但是只能在 go 1.3中才起作用,所以只能选择#1的方式获取go id。 最近一年来, petermattis更新了他的代码,...阅读全文

博文 2017-08-08 03:57:23 smallnest

关于gorouitne

按照a tour of Go 中 Crawl 例程提示,改写了 Crawl 函数,但是只能找出一条 url,想不出原因,请教大家,谢谢。 ``` package main import ( "fmt" "sync" ) type Fetcher interface { // Fetch returns the body of URL and // a slice of URLs found on that page. Fetch(url string) (body string, urls []string, err error) } // Crawl uses fetcher to recursively craw...阅读全文

Golang是如何读取文件内容的

本文旨在快速介绍Go标准库中读取文件的许多选项。 在Go中(就此而言,大多数底层语言和某些动态语言(如Node))返回字节流。 不将所有内容自动转换为字符串的好处是,其中之一是避免昂贵的字符串分配,这会增加GC压力。 为了使本文更加简单,我将使用string(arrayOfBytes)将bytes数组转换为字符串。 但是,在发布生产代码时,不应将其作为一般建议。 1.读取整个文件到内存中 首先,标准库提供了多种功能和实用程序来读取文件数据。我们将从os软件包中提供的基本情况开始。这意味着两个先决条件: 该文件必须容纳在内存中 我们需要预先知道文件的大小,以便实例化一个足以容纳它的缓冲区。 有了os.File对象的句柄,我们可以查询大小并实例化一个字节列表。 package main impo...阅读全文

博文 2020-05-28 11:34:36 第八共同体

golang(cgo)---如何在两个不同的package中使用同样的自定义数据类型?

如何在两个不同的package中使用同样的自定义数据类型?这里主要针对包括在C头文件中结构体类型,如果只是在不同的go package中自定义数据类型,这个很好处理。但实际上处理的核心是一样的,下面通过两个例子来说明解决办法。 测试例程目录 ├── include │ └── data.h └── src ├── common │ └── common.go └── main └── main.go 测试 data.h #pragma once #include struct Data { int a; char b; }; common.go package common /* #include #cgo CFLAGS : -I../../inclu...阅读全文

博文 2016-09-01 21:00:03 FreeApe

通过什么方式能查到标准库的函数或者类是并发安全的?

问题简单明了的如题了. 啰嗦一下问题怎么来的.我在学习go.想要使用go的UDP程序.但是网上的例程基本都这样 sck,_ := net.ListenUDP(....) for { sck.ReadFromUDP() sck.WriteToUDP() } 但是实际用的时候读取数据是阻塞的.发送数据如果没有对方的网卡地址,那么发送也是有阻塞的.那么势必要把读写分开.程序变成了 sck,_ := net.ListenUDP(....) go func() { for { sck.ReadFromUDP() } } func() { for { sck.WriteToUDP() } } 这样读写的过程都使用了同一个UCP...阅读全文

Golang学习 - regexp 包

// 函数 // 判断在 b(s、r)中能否找到 pattern 所匹配的字符串 func Match(pattern string, b []byte) (matched bool, err error) func MatchString(pattern string, s string) (matched bool, err error) func MatchReader(pattern string, r io.RuneReader) (matched bool, err error) // 将 s 中的正则表达式元字符转义成普通字符。 func QuoteMeta(s string) string // 示例:MatchString、QuoteMeta func main() { p...阅读全文

博文 2019-04-19 18:34:40 佛心看世界