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

把别人的Tcl/Tk代码加入到Go语言里11 游戏4 红心游戏

a 首先打开网页下载tcl/tk游戏源码http://sourceforge.net/projects/tkgames/files/latest/download?source=typ_redirect b 把压缩包里的tcl/tk源代码文件tkHearts-0.90用文本编辑器打开,并把所有内容 复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里...阅读全文

博文 2015-05-13 13:00:01 名字不能长

把别人的Tcl/Tk代码加入到Go语言里8 游戏1 trains火车【这货很长很长】

a 首先打开网页 http://wiki.tcl.tk/1359 【trains3.tclUpdated 2012-12-09 19:44:49 by pooryorick】 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如下 【这700行代码的游戏画面简略抓了7张风景,没把...阅读全文

博文 2015-05-13 08:00:01 名字不能长

把别人的Tcl/Tk代码加入到Go语言里14 游戏7 行星游戏

a 首先打开网页 http://wiki.tcl.tk/13601 b 把网页里提到的第一段tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如下 小飞机的控制: Left Arrow - rotate CCW Right Arrow - rotate CW Up Arrow - Thrust S...阅读全文

博文 2015-05-13 16:00:05 名字不能长

把别人的Tcl/Tk代码加入到Go语言里10 游戏5 画图案?

a 首先打开网页 http://wiki.tcl.tk/4206 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 14:00:04 名字不能长

Mac OS 开发环境 Terminal 配置

Mac OS 开发环境 Terminal 配置 --- [TOC] ### Terminal 主题选择 Mac OS 内置主题已经很不错很好看,如果不满意系统自带主题,可以自定义配置。这里推荐下面的配置文件,下载下来,直接导入就好。 [https://github.com/chriskempson/tomorrow-theme](https://github.com/chriskempson/tomorrow-theme) ### Vim 配置.vimrc ```shell $ touch ~/.vimrc ``` 配置内容如下: ```shell syntax on " 自动语法高亮 "colorscheme molokai " 设定配色方案 "set nocompatible " 关闭 ...阅读全文

博文 2017-12-26 03:36:01 jzhongming

把别人的Tcl/Tk代码加入到Go语言里9 游戏2 可旋转的3D多面体

a 首先打开网页 http://wiki.tcl.tk/14283 【3D polyhedra with simple tk canvas Updated 2014-10-24 21:38:58 by ZB 】 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 16:00:07 名字不能长

jvm垃圾回收算法

前言 java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。笔者通过拜读《深入理解java虚拟机》,总结书中内容,给大家分享下java虚拟机常见的垃圾回收算法。 垃圾确定 在垃圾回收之前,jvm需要确定哪些对象已死,即需要当做垃圾被回收。垃圾确认的方法传统的有引用计数法:用一个引用计数器来标记对...阅读全文

博文 2019-01-26 22:34:42 luckiexie

Golang中生成随机字符串并复制到粘贴板

前段时间在生活中偶尔需要对某些文件进行重命名,而且是随机名字,刚 开始是手动重命名然后在键盘上胡乱打一些字母数字,时间长了发现也挺麻烦的,于是想到能不能用golang实现这个功能并且自动把生成的字符串 复制到粘贴板,然后生成exe文件,要用的是直接鼠标双击就行。说干就干。 网上搜了些相关资料,于是写了出来。 安装必要的库 go get github.com/atotto/clipboard 代码实现 package main import ( "fmt" "github.com/atotto/clipboard" "math/rand" "strings" "time" ) var a = [...]string{"a", "b", "c", "d", "e", "f", "g", "h",...阅读全文

博文 2019-12-21 06:32:58 梅云罗

ubuntu eclipse 编写简单go语言

1、下载配置Golang,配置相关环境 一、现在地址:http://www.golangtc.com/download 我选择的是下面这个(64位,linux版) 二、配置环境 解压后在.bashrc中配置环境变量 2、配置gocode 默认情况下go的解压包里面没有gocode,所以我们需要安装一个,通过命令: ? 1 go get -u github.com/nsf/gocode 就可以在go的目录里看到了: 3、eclipse集成goclipse插件 goclipse(https://github.com/GoClipse/goclipse )是eclipse的一个go语言插件,可以在eclipse里面在线安装也可以下载,解压,将features和plugins目录里面的文件复制到ec...阅读全文

博文 2015-06-17 23:01:36 Java__Coder

2014.12最新hosts文件亲测可用google服务

在Ubuntu下同过下面命令修改,把下方数据复制到hosts的底部 sudo gedit /etc/hosts hosts代码在下方 127.0.0.1 localhost ::1 localhost fe80::1%lo0 localhost 255.255.255.255 broadcasthost 17.151.36.30 gs.apple.com 198.252.106.236 serve.netsh.org #Microsoft OneDrive 134.170.108.154 onedrive.live.com 134.170.104.90 onedrive.live.com 134.170.107.154 onedrive.live.com 134.170.108.26 one...阅读全文

博文 2015-06-17 20:05:19 Moriarty_221

Golang 复制版 Copier

Copier 是 Golang 的复制版,它从一个结构复制到了另一个结构。它具有以下特点: * 如果名字匹配,就从一个场景复制到另一个场景 * 如果方法名和场景名匹配,就从方法复制到场景 * 如果场景名和方法名匹配,就从场景复制到方法 * 从片复制到片 * 从结构复制到片 示例代码:

import . "github.com/jinzhu/copier"
type User struct {
    Name string
    Role string
    Age  int32}
    func (user *User) DoubleAge...阅读全文

论egret的坑

1. Tween坑 功能:实现点击播放动画,播放动画后跳转到新标签页面 this.addEventListener(egret.TouchEvent.TOUCH,()=>{ var tw = egret.Tween.get(... tw.to({...},150) .call(()=>{ window.open("http://www.xx/xxx.html", '_blank'); }); } , this); 这样是会被认为不是用户手动触发的,是会被浏览器默认拦截的,不要写在call里边,但是可以写在settimeout里边 setTimeout(function () { window.open("http://www.xx/xxx.html", '_blank'); }) 扩展,像这...阅读全文

博文 2018-09-28 15:34:43 陨石坠灭

把别人的Tcl/Tk代码加入到Go语言里12 游戏5 画图案?

a 首先打开网页 http://wiki.tcl.tk/4206 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 16:00:06 名字不能长

【Golang 基础】Go 语言的接口

Go 语言中的接口   Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,没有数据字段。 只要某个类型拥有了该接口的所有方法,即该类型就算实现了该接口,无需显式声明实现了哪个接口,这被称为 Structurol Typing; package main import "fmt" // 定义 Usb 接口 type Usb interface { GetName() string Connection() } // 定义 Phone 结构 type Phone struct { Name string } // 实现 Usb 接口的 GetName 方法 func (p Phone) GetName() string { return p.Name } // 实现 Usb 接口的 ...阅读全文

博文 2019-03-31 03:34:40 爱写作的程序猿

golang-raft算法理论与实践

前言 我计划写raft的一系列文章,包含从理论到代码实践,此文章依托于MIT的研究生课程。 背景 raft 是一种分布式的共识算法,其目的是要实现多个节点集群的容错性,一致性从而能够构建大规模的软件系统。 在raft之前,比较有名的是Paxos。但是paxos难于理解。 raft的诞生是为了让共识算法更容易理解,在工程上更容易实现。 和其他的共识算法不同的是,raft具有下面的特点: leader:raft中会有一个领导者具有超级权限,可以把自己的log 复制到其他节点中。 leader election: raft每隔一段随机的时间就会进行leader的选举 raft允许集群配置变化时正常运行。 Replicated state machine 状态机是分布式系统中的一个重要概念,任何一个...阅读全文

博文 2020-02-12 07:32:56 唯识相链2

把别人的Tcl/Tk代码加入到Go语言里9 游戏2 可旋转的3D多面体

a 首先打开网页 http://wiki.tcl.tk/14283 【3D polyhedra with simple tk canvas Updated 2014-10-24 21:38:58 by ZB 】 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 08:00:00 名字不能长

8:golang修复数据库文件(sql报错:database disk image is malformed)

思路: 1:导出sql语句到临时文件 2:修改tmp.sql文件(将最后一行的Rollback改为Commit;) 3:读取tmp.sql并写入到新库中 准备工作(三个文件) 1:sqlite3.exe(自行下载:https://www.sqlite.org/download.html) 2:read.sql(自行创建一个空的.sql文件) 3:dump.sql(自行创建一个空的.sql文件) 调用: DoRepair(DBPath, newDbName string) 方法定义: package repairTool import ( "bytes" "debian/ant/service/application" "fmt" "io" "io/ioutil" "os" "os/exec"...阅读全文

博文 2019-10-21 18:32:47 aside section._1OhGeD

把别人的Tcl/Tk代码加入到Go语言里11 游戏4 红心游戏

a 首先打开网页下载tcl/tk游戏源码http://sourceforge.net/projects/tkgames/files/latest/download?source=typ_redirect b 把压缩包里的tcl/tk源代码文件tkHearts-0.90用文本编辑器打开,并把所有内容 复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里...阅读全文

博文 2015-05-13 16:00:07 名字不能长

zabbix检查硬盘S.M.A.R.T状态[go语言实现]

因为服务器比较多,以前都是喜欢用perl写程序,后来发现部署的时候还要安装perl环境,实在太麻烦了,所以改用go编程,把go编译发后,复制到服务器就可以运行,还真的挻方便的。 之前已经用go写了一个mysql 主从同步,检查从服务器是否出错的程序,如果同步出错就可以在zabbix里警告了,把mysql密码写到程序里,再编译,这样比脚本语言要安全很多,而且不用添加一个用户。 原因是这样的,有很多服务器,有很大一部分是普通硬盘,普通硬盘就很容易出问题,因为服务器上面没有办法做badblock 检查(太耗IO资源了),但是检查S.M.A.R.T状态可以提前预知硬盘故障,还是有点用,好过没有,对吧。 程序是基于linux的,window 改改也能用,主要是先检查/dev/sda…b…c…d 循环检...阅读全文

博文 2017-09-09 12:52:46 YiYou.Org

Go 包管理之module

Go Module 使用 Go Module 是官方用来管理 package 依赖的工具, 1.11 新加的, 使用时需要设置变量: GO111MODULE=on . go mod help 可以查看其帮助文档: $ go help mod Go mod provides access to operations on modules. Note that support for modules is built into all the go commands, not just 'go mod'. For example, day-to-day adding, removing, upgrading, and downgrading of dependencies should be d...阅读全文

博文 2018-11-27 23:34:41 jouyouyun

go语言学习笔记之slice用法

一、slice的概念: Slices(切片)slice是概念上一个结构包含三个域:一个数组的指针、长度和容量。切片支持[]操作符来访问底层数组的元素。内置的len函数返回的切片长度。内置的的cap函数返回切片的容量。 切片是引用类型,这意味着如果你将一个切片赋值给另外一个切片,这两个切片将引用同一个底层数组。 二、如何创建slice 创建切片可用以下两种方法: (1)直接创建: s := make([]int, 10) 创建了名为s 的,有10个元素(长度等于10)的整数类型切片 如果创建后没有给slice赋值,那么slice的值为创建类型的默认值,如: packagemain import"fmt" funcmain(){ s:=make([]int,10) fmt.Println(s) ...阅读全文

博文 2015-06-17 23:07:39 wuwenxiang91322

第二天:golang学习笔记之Byte

编码 名称 摘要 ★bytes bytes包实现了操作[]byte的常用函数. encoding encoding包定义了供其它包使用的可以将数据在字节水平和文本表示之间转换的接口. strconv strconv包实现了基本数据类型和其字符串表示的相互转换. strings strings包实现了用于操作字符的简单函数. text scanner对utf-8文本的token扫描服务,tabwriter缩进修正 unicode unicode 包提供了一些测试Unicode码点属性的数据和函数. bytes bytes包共有两个Struct分别是Reader和Buffer以及一个ErrTooLarge的er bytes文件定义了操作[]byte的众多函数: 类型之间的关系:rune,UTF-...阅读全文

博文 2019-12-15 17:32:39 Macmillan_

根据拓扑图理解golang的sync.Map工作原理

sync.Map的拓扑关系图 读懂关系图需要了解的几个关键点 var expunged = unsafe.Pointer(new(interface{})) type Map struct type readOnly struct type entry struct func (m *Map) Load(key interface{}) (value interface{}, ok bool) func (m *Map) Store(key, value interface{}) func (m *Map) Delete(key interface{}) func (m *Map) Range(f func(key, value interface{}) bool) 这里要重点关注readO...阅读全文

博文 2019-11-08 16:02:43 fizz

Golang WebAssembly 前端开发 - 1. Hello world.md

本文使用的环境: go1.11 linux/amd64 chrome 70.0.3538.67 Golang 源文件 main.go 如下: package main func main() { println("Hello, world!") } 在 Golang 源文件目录下,将 Golang 代码编译为 wasm 后缀的 WebAssembly 二进制文件,再将该文件复制到一个工作目录中: GOOS=js GOARCH=wasm go build -o go_main.wasm cp go_main.wasm /path/to/static 工作目录下的 HTML 源文件 go_index.html 如下: 阅读全文

博文 2018-12-29 23:34:45 Platanuses

Go Module 未来的趋势

Go Modules介绍 Modules是Go 1.11中新增的实验性功能,基于vgo演变而来,是一个新型的包管理工具。 GO111MODULE 要使用go module,首先要设置GO111MODULE=on GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。 GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。 GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件,或者当前文件在包含go.mod文件的目录...阅读全文

博文 2019-05-09 03:35:01 My_Fuzz

Docker部署Golang

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

博文 2018-08-15 15:30:02 dqh123

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梦在哪

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 水果糖

垃圾回收(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

map复制 "encoding/json"

```go package main import ( "encoding/json" "fmt" ) var h map[string]string func init() { h = map[string]string{ "a": "aa", "b": "bb", } } func main() { // 复制map不影响原map bs, _ := json.Marshal(h) var h2 map[string]string err := json.Unmarshal(bs, &h2) if err != nil { fmt.Println("error: ", err.Error()) } h2["c"] = "cc" if _, ok := h["c"]; !ok { fmt.P...阅读全文

博文 2018-01-19 13:51:23 hfyarvin

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 不折腾难受斯基

离开 Java 的 101 天,关于继承

程序设计一个很重要的优化点是减少重复代码。一件完成了的事情没人愿意做多次,一堆代码没人愿意重复写好几遍,哪怕是复制粘贴。但当接触的 Golang 代码多了,渐渐的需要用 Golang 写一些有用的项目,发现有时候极难复用已有的代码。思来想去,一个号称具备生产力的语言怎能容忍弱鸡的复用代码的能力。下面举个例子: 图片发自简书App 这个片断企图改写 http 包 Client 结构的方法以达到传递 context 的效果。因发起 HTTP 请求的各大方法都通过调用 Do 方法来执行请求,常规思维下,只需新声明一个结构继承 Client 然后重写 Do 方法就行了。于是就可以通过下面代码中的方式传递自定义的 context : 图片发自简书App 曾经的 Java 经验,让我会觉得这是很自然的一...阅读全文

博文 2019-06-10 23:32:47 mmf多多

GO语言学习笔记(二)IDE安装与配置、格式化代码、生成代码文档

一、安装goland IDE1、goland IDE的下载 下载地址:(我这里是下载的mac版,因为我的是mac本)https://download-cf.jetbrains.com/go/goland-2018.3.3.dmg 2、goland IDE的安装临时激活,有效期只有100天1)一路下一步 在这个页面,选择第二项“Activation code”激活2)登录下面的网址http://idea.lanyus.com/点击:获取注册码把获取到的注册码复制粘贴到“Activation code”下面3)点OK前将“0.0.0.0 account.jetbrains.com”添加到hosts文件中然后点ok即可完成注册。但是这样的注册,有效期只有几个月。 永久性激活,有效期到哪你随便写:1...阅读全文

博文 2019-01-25 00:35:12 Mr大表哥

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