glide可不可以配置一个公共的仓库里来存放依赖?

有问必答astaxie 回复了问题 • 2 人关注 • 1 个回复 • 588 次浏览 • 2016-12-22 11:39 • 来自相关话题

每个小功能写一个服务,服务间的通信,你们用什么方式?

有问必答astaxie 回复了问题 • 8 人关注 • 3 个回复 • 825 次浏览 • 2016-12-22 11:29 • 来自相关话题

Docker 1.13最实用命令行:终于可以愉快地打扫房间了

文章分享数人云 发表了文章 • 0 个评论 • 660 次浏览 • 2016-12-22 11:09 • 来自相关话题

Docker 1.13出来已经有一段时间了,新版本添加了许多有用的命令,本文作者从处女座的洁癖(此处有雾)出发,告诉大家一些整理环境的小技巧。打扫房间... 查看全部


Docker 1.13出来已经有一段时间了,新版本添加了许多有用的命令,本文作者从处女座的洁癖(此处有雾)出发,告诉大家一些整理环境的小技巧。打扫房间再也不需费时又费力了,简单的命令,就可以轻松地把物品分门别类(容器、镜像、网络、存储卷……)地整理好^_^



在1.13版本中,Docker向CLI添加了一些有用的命令,让环境更加整洁。你可能已经体验了很长时间乱糟糟的开发环境——无用的容器,挂起的Docker镜像,弃置的volume,被遗忘的网络……所有这些过时的事物占据了宝贵的资源,最终导致环境无法使用。在之前的文章中曾经提到用各种各样的命令保持环境的整洁,例如:


docker rm -f $(docker ps -aq)


强制地删除所有正在运行的、暂停的以及终止的容器。同样地,也有命令可以删除挂起的镜像、网络和volume。


尽管上述命令解决了问题,但是它们要么专有,要么冗长或者难用。而新加入的命令直截了当又简单好用,现在就开始一一介绍吧。


管理命令


为了整理CLI,Docker 1.13引进了新的管理命令,如下:



  • system

  • container

  • image

  • plugin

  • secret


Docker的老版本中已经有了 network, node, service, swarm 和 volume 。这些新命令组子命令过去作为root命令直接实现。举个例子:


docker exec -it [container-name] [some-command]


exec 命令现在是 container 下面的一个子命令,这个命令相当于:


docker container exec -it [container-name] [some-command]


个人猜测为了兼容性的考虑,旧语句眼下还会使用一段时间。


Docker系统


现在有一个新管理命令 system 。它有4个子命令分别是 df, events, info 和 prune 。命令 docker system df 提供Docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。所以我们现在随时都可以查看Docker使用了多少资源。


如果之前的命令展示出 docker 已经占用了太多空间,我们会开始清理。有一个包办一切的命令:


docker system prune


这个命令会删除当前没有被使用的一切项目,它按照一种正确的序列进行清理,所以会达到最大化的输出结果。首先删除没有被使用的容器,然后是volume和网络,最后是挂起的镜像。通过使用 y 回复来确认操作。如果想在脚本中使用这个命令,可以使用参数 --force 或者 -f 告诉Docker不要发来确认请求。


Docker容器


我们已经知道许多 docker container 的子命令。它们过去(现在也是)是 docker 的直接子命令。可以通过下面的命令得到完整的子命令列表:


docker container --help


在列表中会看到一个 prune 命令。如果使用它,那么只会删除无用的容器。因此这条命令比 docker system prune 命令更局限。使用 --force 或者 -f 同意可以让CLI不再进行确认请求。


Docker网络


这里也有一个 prune 命令:


docker network prune


删除所有孤立的网络。


Docker Volume


volume也有新的 prune 命令了:


docker volume prune


删除所有(本地)没有被容器使用的volume。


Docker镜像


新的镜像命令也是 prune 子命令。--force 用法如上面一样, --all 可以删除所有不用的镜像,不只挂起的镜像。


docker image prune --force --all


这个命令可以删除所有不使用的镜像并且不再请求确认。


总结


Docker 1.13不仅通过引入admin command添加了一些需要的命令,也让我们找到了一些非常有用的清理环境的命令。笔者最爱的命令莫过于 docker system prune,让环境一直保持干净整齐。


本文作者:Gabriel Schenker
原文链接:https://lostechies.com/gabrielschenker/2016/12/12/containers-cleanup-your-house-revisited/

有没有涉及到Golang工作流相关的开源项目?

有问必答Xargin 回复了问题 • 9 人关注 • 3 个回复 • 1070 次浏览 • 2016-12-22 01:29 • 来自相关话题

如何防止go程序被破解

有问必答kevin 回复了问题 • 14 人关注 • 16 个回复 • 2134 次浏览 • 2016-12-21 21:15 • 来自相关话题

有没有什么将office文档转pdf的包或库

有问必答astaxie 回复了问题 • 5 人关注 • 2 个回复 • 560 次浏览 • 2016-12-21 17:29 • 来自相关话题

上海/互联网广告公司招聘Go

招聘应聘heygo 回复了问题 • 17 人关注 • 14 个回复 • 1999 次浏览 • 2016-12-21 15:35 • 来自相关话题

运维开发工程师

招聘应聘七小牛来招聘 发表了文章 • 0 个评论 • 454 次浏览 • 2016-12-20 18:25 • 来自相关话题

  • 运维开发工程师(上海)
  1. 工作职责: -负责设计/研发/运维私有云平台 -负责设计/研发自动化,可视化运维平台

  2. 职责要求: -强烈责任感、严密逻辑思维和主动跨团... 查看全部


  • 运维开发工程师(上海)




  1. 工作职责:
    -负责设计/研发/运维私有云平台
    -负责设计/研发自动化,可视化运维平台




  2. 职责要求:
    -强烈责任感、严密逻辑思维和主动跨团队沟通能力,并且需要有项目管理及推动力
    -熟悉各类编程工具Shell/Go/Python/Perl/Java等,研发能力强
    -深入理解Linux操作系统、体系结构
    -具有Kvm/Docker或Kubernetes等虚拟机或容器及编排管理工具使用和运维经验者
    -本科或以上学历,计算机相关专业者优先,3年以上工作经验



  3. 工作地点:上海市浦东新区金科路2889号长泰广场A座10楼

  4. 投递邮箱xiamengru@qiniu.com



  • 感兴趣的牛人们,简历砸过来~~




公司介绍:
七牛是国内领先的企业级云存储提供商,由存储技术领军人物许式伟创立。七牛通过自身创新的存储2.0以及富媒体云处理技术,专注为“互联网+”企业与创业者提供数据从管理到大数据分析的一站式服务。
目前七牛平台已经承载20多万家企业,覆盖终端用户数超过全国整体网民的50%,很多知名创业者以及传统公司转型互联网比如豌豆荚,陌陌,网易,唱吧,蘑菇街,美拍,步步高,oppo, 平安,顺丰等等都在用七牛。
许多新兴创业者一旦创业,云存储首选也是七牛,比如足记,知名歌手胡彦斌的牛班等。七牛以帮助企业缩短从想法到产品上线的时间距离为使命,努力让云服务成为打造互联网+的标配支持!
官网:www.qiniu.com

推荐一发梯子工具kone

开源程序raindylong 发表了文章 • 2 个评论 • 554 次浏览 • 2016-12-20 16:31 • 来自相关话题

地址:https://github.com/xjdrew/kone (DNS欺骗+NAT2proxy工具,有webui可看统计信息)

利益相关:我司@...

地址:https://github.com/xjdrew/kone
(DNS欺骗+NAT2proxy工具,有webui可看统计信息)


利益相关:我司@xjdrew老湿的作品。。。

【goxel】Go 版的 axel 小工具

开源程序山羊wayne 发表了文章 • 0 个评论 • 436 次浏览 • 2016-12-20 14:21 • 来自相关话题

之前练手写的一个小工具 goxel,类似于 axel,如果你感觉对你有用或者还不错,不要吝啬你的 Star 哈,当然有任何问题或者改进也请告诉我... 查看全部

之前练手写的一个小工具 goxel,类似于 axel,如果你感觉对你有用或者还不错,不要吝啬你的 Star 哈,当然有任何问题或者改进也请告诉我。


goxel




Description


goxel like axel tool

Installation


$ go get github.com/WayneZhouChina/goxel

Usage


goxel [options...] <url>

Options:
-n Numbers of blocks to run(must).
-H Add header string.
-v More status information.
-o Specify local output file(must).
-h Help information.
-V Version information.
-cpus Number of used cpu cores(Default is current machine cores).

Example:


goxel -n 10 -o outfile http://xxx.com

写了个logger

技术讨论quetzal 发表了文章 • 1 个评论 • 366 次浏览 • 2016-12-20 11:39 • 来自相关话题

刚上手golang的时候看log库,为了练手就写了个logger库自己用 主要是设定几个日志级别,然后可以按照大小轮转日志,并限定日志个数,模拟linux的syslog轮转 希望大家帮忙看看,有什么问题,谢谢

logger.go

... 查看全部

刚上手golang的时候看log库,为了练手就写了个logger库自己用
主要是设定几个日志级别,然后可以按照大小轮转日志,并限定日志个数,模拟linux的syslog轮转
希望大家帮忙看看,有什么问题,谢谢


logger.go


package logger

import (
"fmt"
"os"
"sync"
"path/filepath"
"strings"
"strconv"
"time"
"runtime"
)

// 检查文件或目录是否存在
// 如果由 filename 指定的文件或目录存在则返回 true,否则返回 false
func Exist(filename string) bool {
_, err := os.Stat(filename)
return err == nil || os.IsExist(err)
}

type level int

const (
DetailLog level = iota
DebugLog
InfoLog
WarnLog
ErrorLog
PanicLog
LevelNum = 6
)

const levelChar = "TDIWEP"

var levelName = []string{
DetailLog: "DETAIL",
DebugLog: "DEBUG",
InfoLog: "INFO",
WarnLog: "WARN",
ErrorLog: "ERROR",
PanicLog: "PANIC",
}

var logging = &loggingT{toStderr:true, outputLevel:DetailLog, w:os.Stderr}

func SetLevel(l level) {
logging.outputLevel = l
}

func SetRotatingFile(path string, maxBytes int64, backCount int) bool {
dir := filepath.Dir(path)
if !strings.EqualFold(dir, ".") {
if err := os.MkdirAll(dir, 0755); err != nil {
fmt.Printf("ERROR - MkdirAll(%s): %s\n", dir, err.Error())
return false
}
}

f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
fmt.Printf("ERROR - OpenFile(%s): %s\n", path, err.Error())
return false
}

logging.toStderr = false
logging.filename = path
logging.w = f
logging.maxBytes = maxBytes
logging.backCount = backCount

//fmt.Printf("%#v", logging)
return true
}

func Detail(format string, v ...interface{}) {
logging.printf(DetailLog, format, v...)
}

func Debug(format string, v ...interface{}) {
logging.printf(DebugLog, format, v...)
}

func Info(format string, v ...interface{}) {
logging.printf(InfoLog, format, v...)
}
func Warn(format string, v ...interface{}) {
logging.printf(WarnLog, format, v...)
}

func Error(format string, v ...interface{}) {
logging.printf(ErrorLog, format, v...)
}

func Panic(format string, v ...interface{}) {
logging.printf(PanicLog, format, v...)
}

// loggingT collects all the global state of the logging setup.
type loggingT struct {
// 是否打印到终端
toStderr bool

// 日志的输出级别
outputLevel level

// mu protects the remaining elements of this structure and is
// used to synchronize logging.
mu sync.Mutex

// 日志文件名称 用于打开文件和轮转日志
filename string

// 写日志的对象
//文件对象
w *os.File

// 保留的日志个数 main.log.1
backCount int

// 单文件大小
maxBytes int64
}

func (self *loggingT) rotatingFile() {
self.w.Close()
self.w = nil

for i := self.backCount; i >= 0; i-- {
backFilename := self.filename + "." + strconv.Itoa(i)
backFilename_obj := self.filename + "." + strconv.Itoa(i+1)

if i > 0 && !Exist(backFilename) { continue }

if i == self.backCount {
os.Remove(backFilename)
} else if i == 0 {
os.Rename(self.filename, backFilename_obj)
} else {
os.Rename(backFilename, backFilename_obj)
}
}

f, err := os.OpenFile(self.filename, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
println(err)
return
}

self.w = f
}

func (self *loggingT) printf(l level, format string, v ...interface{}) {
if self.outputLevel > l { return }

msg := fmt.Sprintf(format, v...)

self.mu.Lock()
defer self.mu.Unlock()

if self.toStderr == false {
info, err := self.w.Stat();
if err == nil && info.Size() >= self.maxBytes {
self.rotatingFile()
}
}

_, file, line, ok := runtime.Caller(2)
if !ok {
file = "???"
line = 1
} else {
slash := strings.LastIndex(file, "/")
if slash >= 0 {
file = file[slash+1:]
}
}
fmt.Fprintf(self.w, "%s %s - %s [%s:%d]\n", time.Now().Format("2006-01-02 15:04:05"), levelName[l], msg, file, line)
}

logger_test.go


package logger

import (
"testing"
)

func TestNormal(t *testing.T) {
SetLevel(DetailLog)
Detail("%d", DetailLog)
Debug("%d", DebugLog)
Info("%d", InfoLog)
Error("%d", ErrorLog)
Panic("%d", PanicLog)
}

liteide包导入的问题

有问必答cjmxp 回复了问题 • 3 人关注 • 4 个回复 • 610 次浏览 • 2016-12-19 17:16 • 来自相关话题

招聘golang工程师

招聘应聘lucyne 发表了文章 • 4 个评论 • 877 次浏览 • 2016-12-19 11:28 • 来自相关话题

招聘go工程师,推荐有礼。

负责运维工具的开发。 薪资:20k--30k 可年前谈,年后入职 北京C轮创业公司 岗位要求:

  • 一年以上后台golang或开发经验。
  • 扎实的golang基础,熟悉常用包... 查看全部

招聘go工程师,推荐有礼。


负责运维工具的开发。
薪资:20k--30k
可年前谈,年后入职
北京C轮创业公司
岗位要求:



  • 一年以上后台golang或开发经验。

  • 扎实的golang基础,熟悉常用包。

  • 熟悉MySQL、Redis等数据库。

  • 熟悉linux,有高并发经验优先。

  • 在github上有源码的优先。

  • 能够自我驱动,有上进心。


邮箱:dblucyne@gmail.com

beego根目录静态文件访问

技术讨论touei 回复了问题 • 2 人关注 • 1 个回复 • 843 次浏览 • 2016-12-19 10:15 • 来自相关话题

gbb-自己写的golang辅助编译工具(不知道这么描述是否确切),请大伙给点建议!

开源程序voidint 发表了文章 • 1 个评论 • 363 次浏览 • 2016-12-18 22:14 • 来自相关话题