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

DockOne技术分享(四):AppC和Docker的对比

【编者的话】 现在一说到“容器”,几乎所有人首先想到的就是Docker。Docker作为目前最主流的容器标准,掩盖了许多前辈和后续者的光辉。事实上,Docker既不是第一个容器类产品(OpenVZ、Lxc等都远远早于它),也不会是最后一个。今天我们来聊一个最近有点火的新容器标准:AppC。 AppC是 CoreOS 公司在2014年12月发起的社区项目,旨在设计一种新式的跨平台容器在镜像格式、运行方式和服务发现机制等方面的标准。 从官方的表态说,这个项目最初诞生的原因是,主流容器工具 Docker 正在从一个单纯的容器工具成为自成一体的生态圈。而 Docker 的中心式管理方式(由每个主机上的 Docker -d 后台进程统一控制)对于 Systemd 以及第三方的任务编排工具并不友好(具体...阅读全文

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名为main.gogo源文件以.go作为后缀,命名时建议统一为小写英文字母用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码package main import "fm...阅读全文

博文 2020-02-09 00:33:10 jonson_jackson

DockOne微信分享( 一零二):基于容器的日志管理实践

【编者的话】业务平台每天产生大量日志数据,为了实现数据分析,需要将生产服务器上的所有日志收集后进行大数据分析处理,Docker提供了日志驱动,然而并不能满足不同场景需求,本次将结合实例分享日志采集、存储以及告警等方面的实践经验。 2013年以来Docker迅速火了起来,它的理念带来了非常大的便利性,不过实际应用中会发现还有监控、日志、网络等问题尚待解决,本文会结合实例分享数人云做容器日志系统的经验。 基于ELK的日志管理系统架构日志收集是大数据的基础,业务平台每天产生大量日志数据,为了实现数据分析,需要将生产服务器上的所有日志收集后进行分析处理;高可用性,高可靠性以及可扩展性是日志收集系统的必备要素。 ELK是目前较流行的日志一体化解决方案,提供日志收集、处理、存储、搜索、展示等功能。容器标...阅读全文

博文 2017-06-25 16:25:28 Dataman数人科技

Speedle 简介二:策略即改即生效, 无需重启

Speedle 简介二:策略即改即生效, 无需重启 # Speedle 策略库的存储 目前, Speedle支持两种存储方式,用户也可扩展以支持其他存储方式 * 文件 * ETCD # 策略的修改 * 命令行/spctl * RestFul API # 如何使修改的策略生效 无论文件还是ETCD, Speedle运行时(ADS)都会Watch其更改,依据更改自动更新运行时策略库,更改几乎是即刻生效, 无需额外操作...阅读全文

博文 2019-04-15 16:19:55 speedle_fan

Golang 命令行 os.Args 和 flag包

参考Go语言-命令行参数(os.Args, flag包) 大部分Go程序都是没有UI的,运行在纯命令行的模式下,该干什么全靠运行参数。 这里介绍下Go语言命令行程序和他们的参数。 一、os.args 程序获取运行他时给出的参数,可以通过os包来实现。先看代码: package main import ( "fmt" "os" "strconv" ) func main () { for idx, args := range os.Args { fmt.Println("参数" + strconv.Itoa(idx) + ":", args) } } 运行起来得到的如下: $go run main.go 1 3 -X ? 参数0: /tmp/go-build116558042/command-...阅读全文

博文 2019-03-22 14:34:52 懒皮

go语言20小时从入门到精通(六、工程管理)

在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系。如果这样一个文件一个文件逐步编译,那不亚于一场灾难。 Go语言的设计者作为行业老将,自然不会忽略这一点。早期Go语言使用makefile作为临时方案,到了Go 1发布时引入了强大无比的Go命令行工具。 Go命令行工具的革命性之处在于彻底消除了工程文件的概念,完全用目录结构和包名来推导工程结构和构建顺序。针对只有一个源文件的情况讨论工程管理看起来会比较多余,因为这可以直接用go run和go build搞定。下面我们将用一个更接近现实的虚拟项目来展示Go语言的基本工程管理方法。 6.1 工作区 6.1.1 工作区介绍 Go代码必须放在工作区中。工作区其实就...阅读全文

博文 2019-09-18 01:34:43 后端小黑胖

go-源码阅读-准备

golang语言写起来很方便,但是如果想把代码写的更好,例如规避gc潜在的问题,节约内存,提升运行性能,都需要对虚拟机做一些了解。这一系列的文章是我再阅读雨痕的《GO语言学习笔记》,记录一些信息。环境go 1.5.1 amd64 ubuntu14.04.3 LTS gdb 7.7.1引导程序启动不是使用main.main函数,之前有命令行处理,运行时初始化工作之后,才会进入用户逻辑。编写一个最简单的helloworld的文件。使用gdb来调试。作者建议平时多使用编译命令行来处理,减少对于IDE的依赖,有利于自己记住这些编译选项。编译的时候使用-gcflags "-N-1" -o test 。使用gdb加载test使用(gdb)info files检查本地可执行文件入口点,直接对这个地址加断点...阅读全文

博文 2020-01-18 15:32:42 阿彪2020

golang 标准命令行解析库 flag

flag 库实现了对命令行参数的解析 基本用法 package main import ( "fmt" "flag" ) func main() { b := flag.Bool("b", false, "bool flag") s := flag.String("s", "hello golang", "string flag") flag.Parse() fmt.Println("b is", *b) fmt.Println("s is", *s) } 上面代码指定了两个选项: bool 类型的 b 选项,默认值为 false,帮助信息 bool flag string 类型的 s 选项,默认值为 hello golang,帮助信息 string flag 执行 go run main....阅读全文

06-Go语言命令行参数

GO命令行操作指令 标准go语言项目文件目录格式 项目文件夹就是GOPATH指向的文件夹 src文件夹是专门用于存放源码文件的 main文件夹是专门用于存储package main包相关源码文件的 其它文件夹是专门用于存储除package main包以外源码文件的 bin文件夹是专门用于存储编译之后的可执行程序的 pkg文件夹是专门用于存储编译之后的.a文件的 |---项目文件夹 -----------|--------src文件夹 -----------------------------|--------main文件夹 -----------------------------|--------其它文件夹 -----------|--------bin文件夹 -----------|--...阅读全文

博文 2018-10-15 19:34:39 月色下的阳光

【低门槛Golang教学】一、断言

一、前言 由于掌握的开发技能多种多样(Node、Lua、Golang、PHP、C#、Python),导致公司基础平台项目一直难以开展。 终于再三取舍之下选择了 'Golang' 这个新秀语种,因为 'Golang' 非常契合本人的简洁风格,所以日后除了'Laravel' 相关的教程以外,'Golang' 的教学将会成为最主要输出。 二、说明 本文的主题是 接口类型断言 (assert),阅读后文的必要前提是你已经对 'Golang' 有了一定了解。 后文同样假设你已经搭建好了 'Golang' 的开发环境。 二、开始 接口类型断言 (assert) 的基本语法如下: # x:任意一个interface # y:断言结果类型名称 # z:用y类型断言x接口后结果 z := x.(y) 显然,上...阅读全文

博文 2019-03-16 18:34:41 我爱余倩

使用Visual Studio Code调试Golang工程

准备VSCode 在官网下载最新版的VSCode: Visual Studio Code - Code Editing. Redefined 安装Golang插件 打开扩展面板 VSCode->查看->扩展 找到Go插件 在搜索框里输入Go, 找到第二行写有 Rich Go language support for Visual Studio Code的插件, 点击安装 重启编辑器 配置启动项 打开调试面板 VSCode->查看->调试 添加调试目标 在"没有调试"的下拉框中点击"添加配置.." 添加目标调试配置 { "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "la...阅读全文

博文 2019-10-18 01:32:48 aside section ._1OhGeD

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名为main.gogo源文件以.go作为后缀,命名时建议统一为小写英文字母用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码package main import "fm...阅读全文

博文 2020-02-09 00:33:10 jonson_jackson

Go语言库系列之flag

背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default 140) $ flag girl --height 170 恭喜你获得了身高 170 的女朋友 极速上手 整个实现非常简单,只需要5个步骤 第一步,引库 import "flag" 第二步,定义变量 定义该变量的作用是存储命令行参数传来的值 var height int 第三步,配置命令信息 在main函数或init函数中加入 flag.IntVar(&height, "height", 140, "身高") 第一个参数是定义的变量引用 第二个参数:命令的名称 第三个参数:命令参数的默认值 第...阅读全文

博文 2020-04-02 00:32:44 平也

golang flag 命令行参数解析

基础例子 // 注册参数 port := flag.Int("p", 8080, "server Port") // 解析参数, 模块方法将使用 os.Args[1:] 做参数解析 flag.Parse() fmt.Printf("server port:%d", port) 基础类型 Flag 单条flag信息 type Flag struct { Name string // flag在命令行中的名字 Usage string // 帮助信息 Value Value // 要设置的值 DefValue string // 默认值(文本格式),用于使用信息 } FlagSet flag 设置对象 type FlagSet struct { // Usage函数在解析flag出现错误时会被调...阅读全文

博文 2019-07-30 03:32:40 直立猿

利用Click和argparse给你Python程序构建一个优雅的命令行界面!

我们知道在Linux下有优雅的shell终端命令行界面,shell脚本都可以优雅用命令行的方式来运行。而且shell也再带优化命令行参数解析的bash内部命令getopts和大多数发行版附带的外部命令getops。Perl语言也有Getopt::XX系列模块来实现类似功能;Golang也有flag标准库以及更加强大的第三库cobra。 Python资源共享群:484031800说了这么多你肯定要问,那么Python呢?Python不像shell,perl一样有便捷强大的oneline脚本,虽然Python有强大的web界面下的脚本执行环境Jupyter Note,但是对终端命令行下的执行也是我们要追求的目标。本文虫虫就给大家介绍如何在Python下实现优雅的终端命令行界面CLI,涉及的模块有...阅读全文

博文 2019-08-20 16:02:54 顾向

golang应用快速搭建框架jotnar

jotnar 是一个golang项目快速搭建的框架,它本身是集成其它常用的框架,以达到快速开发的目的 Github项目地址 安装 go get -u github.com/paulyung541/jotnar 初始化 项目里经常会使用命令行来初始化,或者是使用配置文件。我们每新开一些项目,都会用到这些基础的功能,但是每次都去写,难免会枯燥,也不利于项目集成。使用jotnar则将这些烦琐的操作集成进来,能够非常快速地搭建一个项目 配置初始化 将命令行传参或者配置文件的设置加载到内存中,并在任何地方随心所欲地使用它们。 这里提供了2种选择: 命令行传参 使用viper这个优秀的配置文件读取框架 命令行传参方式进行初始化 ./application --ip 192.168.0.1 —port 1...阅读全文

shell快讲第一节:基础篇

前言 我有不少同事学了shell很久,最后来一句学不会,或者学会写几个代码段子过一阵子不用也就忘记了。我并没有专门学过shell,也从不钻研它,比如有人用shell写图形界面,有人用shell写游戏,包括更大型的程序。其实这种人我也佩服的,但是我觉得写代码最好要使用匹配场景的语言,shell我只用来写一些简单的插件,再复杂的需求我会用Python,如果是工程项目我会用golang就这样。怎么才叫学会一门语言 这个问题看似简单,实则还挺复杂的,大学的时候我觉得学会一门语言就是学会它的语法,当我学会了c的语法的时候,我就骄傲的说我学会了c,当然现实啪啪啪的大脸。我无法用c完成任何一项编程工作。可能也有人觉得学会一门语言就是学会它主要的标准库,比如python,学会主要的标准库就可以做很多事情了。...阅读全文

博文 2019-08-13 10:32:51 梦回上玄

兄弟连区块链教程分享eth源码分析RPC分析

兄弟连区块链教程分享eth源码分析RPC分析。这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符。在这个环境里也内置了一些用来操作eth的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括: eth:包含一些跟操作区块链相关的方法;net:包含一些查看p2p网络状态的方法;admin:包含一些与管理节点相关的方法;miner:包含启动&停止挖矿的一些方法;personal:主要包含一些管理账户的方法;txpool:包含一些查看交易内存池的方法;web3:包含了以上对象,还包含一些单位换算的方法。 personal.newAccount('liyuechun')personal.listAccounts ac...阅读全文

博文 2018-10-18 16:34:42 兄弟连区块链培训

扣丁学堂Linux培训简述Linux使用zsh提高效率的5条建议

本篇文章扣丁学堂Linux培训小编给大家分享一下Linux使用zsh提高效率的5条建议,对Linux开发技术感兴趣或者还是想要加入到Linux开发领域的小伙伴可以随小编一起来了解一下哦。 Linux培训 Z shell(zsh)是Linux 和类Unix 系统中的一个命令解析器。 它跟sh (Bourne shell) 家族的其它解析器(如bash和ksh)有着相似的特点,但它还提供了大量的高级特性以及强大的命令行编辑功能,如增强版Tab 补全。在这里不可能涉及到zsh的所有功能,本文列出5 个技巧,让你通过在命令行使用zsh 来提高你的生产力。1、主题和插件多年来,zsh以及开发了数不清的主题和插件。主题是一个预定义提示符的配置,而插件则是一组常用的别名命令和函数,可以让你更方便的使用一种...阅读全文

博文 2019-03-18 18:34:42 扣丁学堂

python、go、shell、c、命令行参数解析

用的半生不熟的Linux环境,看看几种语言的命令行参数解析~1. pythonpython demo.py -u tom -g users -o output.log --time-out 300使用getopt.getopt()模块import getoptimport systry: args, opts = getopt.getopt(sys.argv[0], "u:g:o:", "time_out=")except Exception as ex: print(str(ex))for key,value in opts: if key == "-u": username = value elif key == "-g": group = value elif key == "-o":...阅读全文

博文 2019-02-25 23:34:42 __六便士

golang初探与命令源码分析

前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main.go的目录下执行go run main.go却报hello函数没有定义的错: 代码结构如下: **gopath ---- src** **----gohello** **----hello.go** ** ----main.go** main.go如下: package main import "fmt" func main() { fmt.Println("my name is main") hello() } hello.go如下: package main import "fmt" f...阅读全文

博文 2019-10-19 21:02:44 小碗汤

【代码篇】从零开始一步步搭建自己的golang框架(三)

上一篇文章里,我们定了项目基本目录结构。现在来回顾一下我的思路: 创建入口文件; 指定配置、日志目录; 指定数据库、队列、缓存组件目录; 创建数据处理的controller目录; 指定公共函数等杂项。 接下来,我们还是按照这个顺序填充代码。 入口文件 func main() { config.InitConfig() logger.InitLogger() } 暂且忽略一些实现细节,我们需要先初始化配置和日志,先来看看日志,我选用Uber的zap日志库。来看看日志模块怎么写? 日志 package logger import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) v...阅读全文

博文 2020-01-20 12:32:42 onepunchgo

golang 基础(18)字符串

square-gopher.png 字符串 immutability 字符串是不可变类型 strigs 标准库提供字符串基本操作 strconv 字符串与其他类型的转换 func main() { var c byte = 'H' fmt.Println(c) mj := string(45) fmt.Println(mj) } 我们尝试输出c byte = 'H'``和string(45)`` 72 - 结果可能预期有些差别,如果我们将```mj := string(72)`` 我们就会得到 72 H 在 go 语言会将 sybmol(符号)看作数字,而将string是作为sybmole 的数组 "hello world" 在 go 眼里是数组[72 101 100 108 111...]...阅读全文

golang 命令行开发基础

os.Args获取命令行参数 os.Args参数列表 0 :程序路径(go run 运行 0 为临时工作目录的路径,编译后运行,0 二进制文件名) 1 第一个参数 2 第二个参数... ... len(os.Args) 参数数量 示例 /** * @Author : jinchunguang * @Date : 19-11-4 上午10:37 * @Project : tcp-chat */ package main import ( "fmt" "os" ) func main() { // 获取命令行参数 fmt.Println("命令行参数数量:", len(os.Args)) for k, v := range os.Args { fmt.Printf("args[%v]=[%v]\...阅读全文

博文 2019-11-04 15:33:23 aside section._1OhGeD

Go语言库系列之flag

背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default 140) $ flag girl --height 170 恭喜你获得了身高 170 的女朋友 极速上手 整个实现非常简单,只需要5个步骤 第一步,引库 import "flag" 第二步,定义变量 定义该变量的作用是存储命令行参数传来的值 var height int 第三步,配置命令信息 在main函数或init函数中加入 flag.IntVar(&height, "height", 140, "身高") 第一个参数是定义的变量引用 第二个参数:命令的名称 第三个参数:命令参数的默认值 第...阅读全文

博文 2020-04-02 21:33:08 平也

服务计算 - 3 | CLI 命令行实用程序开发基础

服务计算 - 3 | CLI 命令行实用程序开发基础 概述 CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率。 基本要求 参阅 Selpg命令行程序设计逻辑...阅读全文

博文 2018-10-11 13:34:42 刘一

Go 命令行解析 flag 包之通过子命令实现看 go 命令源码

上篇文章 介绍了 flag 中如何扩展一个新的类型支持。本篇介绍如何使用 flag 实现子命令,总的来说,这篇才是这个系列的核心,前两篇只是铺垫。 前两篇文章链接如下: Go 命令行解析 flag 包之快速上手 Go 命令行解析 flag 包之扩展新类型 希望看完本篇文章,如果再阅读 go 命令的实现源码,至少在整体结构上不会迷失方向了。 FlagSet 正式介绍子命令的实现之前,先了解下 flag 包中的一个类型,FlagSet,它表示了一个命令。 从命令的组成要素上看,一个命令由命令名、选项 Flag 与参数三部分组成。类似如下: $ cmd --flag1 --flag2 -f=flag3 arg1 arg2 arg3 复制代码FlagSet 的定义也正符合了这一点,如下: type ...阅读全文

博文 2019-12-01 16:04:14 波罗学

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to apply to go commands by default, when the given flag is known by the current command. Each entry must be a standalon...阅读全文

博文 2020-01-17 01:32:39 onepunchgo

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld 在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux 本文将介绍如何书写、编译、并运行第一个go语言程序 同时详细介绍其内部机制 书写第一个go语言程序 首先我们可以在任意位置新建一个文件,命名为main.go go源文件以.go作为后缀,命名时建议统一为小写英文字母 用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码 package main import "fmt...阅读全文

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

从 golang flag 迁移到 cmdr

基于 cmdr v1.0.3从 golang flag 迁移到 cmdr 采用一个新的命令行解释器框架,最痛苦地莫过于编写数据结构或者流式定义了。我们首先回顾一下 cmdr 和其它大多数三方增强命令行解释器都支持的最典型的两种命令行界面定义方式,然后再来研究一下 cmdr 新增的最平滑的迁移方案。 典型的方式 通过结构数据体定义 有的增强工具(例如 cobra,viper)采用结构体数据定义方式来完成界面指定,如同 cmdr 的这样: rootCmd = &cmdr.RootCommand{ Command: cmdr.Command{ BaseOpt: cmdr.BaseOpt{ Name: appName, Description: desc, LongDescription: long...阅读全文

博文 2019-07-23 22:02:44 hedzr

最新golang开发环境搭建

本文将以mac环境为例给读者一个搭建golang开发环境的方案 golang安装 在mac 系统下,大部分用户都安装有home brew(https://brew.sh/ ),我们可以通过home brew来安装golang。 brew install go 执行完毕后 执行go version可以查看go的版本。 设置GOPROXY echo "export GOPROXY=https://goproxy.cn" >> $HOME/.zshenv source $HOME/.zshenv VSCode安装 打开https://code.visualstudio.com/。点击“Download For Mac” 下载Vscode。下载完成后解压,可以得到Visual Studio Code...阅读全文

初识GoLang

1、概念 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 2、特点 简洁、快速、安全 Go语言语法简单易学、学习曲线平缓,相比于C/C++,Go语言具有很高的开发效率。 并行、有趣、开源 Go语言为高并发而生。 代码风格统一,便于阅读。 Go语言使用go fmt,统一格式化代码。 3、安装 下载地址 下载对应平台下的文件,使用下一步安装法。 image.png ...阅读全文

博文 2020-01-27 13:32:41 kjkongjun

14.Go语言标准库flag基本使用

Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 1.os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 os.Args十一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。 package main import ( "fmt" "os" ) func main() { //os.Args是一个[]string if len(os.Args)>0{ for index,arg := range os.Args{ fmt.Printf("args[%d]=%v\n",index,arg) } } } 结果: ➜ test go build -o "args_demo" ➜ test...阅读全文

博文 2020-02-07 01:33:11 DevOperater

go匿名函数实现操作封装

/** * 使用匿名函数实现操作封装 * 将匿名函数作为 map 的键值,通过命令行参数动态调用匿名函数 * 运行命令 go run src/hh/main.go --skill=fly */ package main import ( "flag" "fmt" ) var skillParam = flag.String("skill", "", "skill to perform") func main() { flag.Parse() var skill = map[string]func(){ "fire": func() { fmt.Println("chicken fire") }, "run": func() { fmt.Println("soldier run") }, "f...阅读全文

博文 2019-12-19 11:34:13 huang_he_87

Go Web编程--解析JSON请求和生成JSON响应

现在无论是网站、App、小程序还是移动端H5页面应用,都是采用前端与后端单独部署,相互之间以API接口交互的形式构建而成的。因为在结合可读性、编码数据大小和开发者使用难度上都JSON格式是一个比较好的选择,所以接口的数据格式通常都采用JSON,即前端在发送POST,PUT,PATCH请求添加,更改数据时会把数据以JSON格式放到请求的Body中。而后端则是所有数据都会以JSON格式返回。 关于JSON可读性、编码数据大小和开发者使用难度上,因为其可读性不如XML结构,但是数据量小,用程序操作起来更方便。对比Protobuf来说,Protobuf编码速度、编码后数据大小比JSON都要好,但是用程序操作起来没有JSON方便简单,编码后的数据是二进制格式的,易读性完全没有。所以整体来说JSON是一...阅读全文

博文 2020-04-03 11:32:53 Kevin

go 学习笔记之环境搭建

千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意的就是 $GOPATH 环境变量的设置问题. 不过,简单起见,目前采用默认配置,等到比较熟悉 Go 语言时候再自定义设置也不迟,因此采用喜闻乐见的傻瓜式安装方式吧! go-base-setup-index.png Go 下载安装 由于众所周知的原因,谷歌被墙,因此 Go 的国外官网无法访问,好在已提供 Go 的中国官网可以正常访问. go-base-setup-website.png 国外官网: https://golang.org/ 国内官网: https://golang.google.cn...阅读全文

博文 2019-08-01 20:33:52 雪之梦技术驿站

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。 这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。 github.com/parro-it/aw…这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。 我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态,我心中的预期是一周 3-5 个。 今天是第一天,我们...阅读全文

博文 2020-01-13 11:34:22 darjun

Go学习第一集,从console接收命令行参数

废话少说,直接上代码: package main import ( "flag" "fmt") var infile *string =flag.String("i","infile","File contains values for inputpath") var outfile *string =flag.String("o","outfile","File to receive values for outputpath") func main() { flag.Parse() if infile!=nil{ fmt.Println("infile=",*infile,"outfile=",*outfile) } } 进入文件所在目录,执行 go build console.go,生...阅读全文

博文 2020-01-02 11:32:41 Nirvana

shell快讲第一节--shell基础

前言 我有不少同事学了shell很久,最后来一句学不会,或者学会写几个代码段子过一阵子不用也就忘记了。我并没有专门学过shell,也从不钻研它,比如有人用shell写图形界面,有人用shell写游戏,包括更大型的程序。其实这种人我也佩服的,但是我觉得写代码最好要使用匹配场景的语言,shell我只用来写一些简单的插件,再复杂的需求我会用Python,如果是工程项目我会用golang就这样。 怎么才叫学会一门语言 这个问题看似简单,实则还挺复杂的,大学的时候我觉得学会一门语言就是学会它的语法,当我学会了c的语法的时候,我就骄傲的说我学会了c,当然现实啪啪啪的打脸。我无法用c完成任何一项编程工作。可能也有人觉得学会一门语言就是学会它主要的标准库,比如python,学会主要的标准库就可以做很多事情了...阅读全文

博文 2019-08-13 12:32:49 梦回上玄

Go 命令行解析 flag 包之扩展新类型

上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int、int64、uint、uint64)、浮点型(float64)、字符串(string)和时长(duration)。 flag 内置支持能满足大部分的需求,但某些场景,需要自定义解析规则。一个优秀的库肯定要支持扩展的。本文将介绍如何为 flag 扩展一个新的类型支持? 扩展目标 在 gvg 这个小工具中,list 子命令支持获取 Go 的版本列表。但版本的信息来源有多处,比如 installed(已安装)、local(本地仓库)和 remote(远程仓库)。 查看下 list 的帮助信息,如下: NAME: gvg list - list go versions USAGE: gvg list [command optio...阅读全文

博文 2019-11-25 15:04:42 波罗学

第一个Go程序

学习一门新的编程语言,当然躲不过hello world了。下面是go版本的hello world package main // 声明自己属于main包 import "fmt" // 导入标准库代码包fmt // 入口函数,也称主函数 func main() { fmt.Println("Hello World") // 打印Hello World } goland可以直接点run运行,也可以使用命令行来执行。 cd到该文件目录下 go build main.go // main.go是该文件名,文件名可以自己定 默认编译出的可执行文件名就是main,windows下是main.exe, 直接 main.exe,就可以看到输出...阅读全文

博文 2020-02-24 17:32:43 iuoui

go 学习笔记之工作空间

搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.exe |-- pkg | `-- windows_amd64 | `-- github.com | `-- snowdreams1006 | `-- learn-go | `-- strings.a `-- src `-- github.com `-- snowdreams1006 `-- learn-go |-- README.md |-- hello | `-- hello.go `-- strings |-- reverse.go `-- reverse_test.go Go 相关的代码保...阅读全文

博文 2019-08-02 21:32:41 雪之梦技术驿站

Go语言入门(九) 文件操作

文件操作 文件的基本操作 读文件 func readFile(){ filename := "./aaa.log" file, err := os.Open(filename) if err != nil { fmt.Printf("open %s is error,error %v\n",filename,err) return } //关闭文件句柄 defer func() { file.Close() }() //读取文件 var buf[4096]byte var content []byte for { n,err := file.Read(buf[:]) if err != nil && err != io.EOF { fmt.Printf("Read %s failed,err...阅读全文

博文 2020-04-09 14:33:33 wx5b285b48ed74e

golang标准库之flag

flag包实现了简单的命令行参数解析,支持bool、int、int64、uint、uint64、float64、string和time.Duration八种类型的命令行解析。 使用方法 注册flag流程如下: import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname") // 返回指针类型,访问时需要加* fmt.Println("ip has value ", *ip) var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") // 放在init函数中,确保...阅读全文

博文 2020-06-02 17:32:53 风铃草613

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to applyto go commands by default, when the given flag is known bythe current command. Each entry must be a standalone ...阅读全文

博文 2020-01-17 11:33:44 wx5e1abbbb0a5e5

golang初探与命令源码分析

前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main.go的目录下执行go run main.go却报hello函数没有定义的错: 代码结构如下: **gopath ---- src** **----gohello** **----hello.go** ** ----main.go** main.go如下: package main import "fmt" func main() { fmt.Println("my name is main") hello() } hello.go如下: package main import "fmt" f...阅读全文

博文 2019-10-18 10:02:51 小碗汤

Go Modules 详解

文链接:Go Modules 详解 Go 1.11 和 Go 1.12 包含了初步的 Go Modules 支持,且计划在 2019 年 8 月发布的 Go 1.13 会在所有开发过程中默认使用 Go Modules。 Go Modules 是为了提升使用其他开发者代码,即添加依赖项(模块、包)时的体验,也是为了让代码的正确性、安全性得到保障。并且 Go Modules 可以使用 GOPROXY 环境变量来解决中国大陆无法使用 go get 的问题。 所以学习跟 Go Modules 有关的知识是很有必要的。 模式 Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义: 默认模式(未设置该环境变量或 GO111MODULE=a...阅读全文

golang 命令行参数解析 hflag

## 简介 `hflag` 是被设计用来替代标准的 `flag` 库,提供更强大更灵活的命令行解析功能,相比标准库,`hflag` 有如下特点 - 支持可选参数和必选参数 - 支持参数缩写 - 支持位置参数,位置参数可以出现在任意位置 - 支持 bool 参数简写 (`-aux` 和 `-a -u -x` 等效) - 支持值参数缩写 (`-p123456` 和 `-p 123456` 等效) - 更多类型的支持,支持 `net.IP`,`time.Time`,`time.Duration`,`[]int`, `[]string` 的解析 - 更友好的用法帮助 - 提供一套更简洁的 api - 完全兼容 flag 接口 ## 用法 `hflag` 提供两套 `api`,一套完全兼容标准库的 `...阅读全文

博文 2019-11-28 17:58:32 hatlonely

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。https://github.com/parro-it/awesome-micro-npm-packages这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态...阅读全文

博文 2020-01-12 23:32:39 darjun

go 学习笔记之工作空间

搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.exe |-- pkg | `-- windows_amd64 | `-- github.com | `-- snowdreams1006 | `-- learn-go | `-- strings.a `-- src `-- github.com `-- snowdreams1006 `-- learn-go |-- README.md |-- hello | `-- hello.go `-- strings |-- reverse.go `-- reverse_test.go Go 相关的代码保...阅读全文

博文 2019-08-02 17:32:39 雪之梦技术驿站