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

利用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在编译时用ldflags设置变量的值

The Go linker (go tool link) has an option to set the value of an uninitialised string variable: -X importpath.name=value Set the value of the string variable in importpath named name to value. Note that before Go 1.5 this option took two separate arguments. Now it takes one argument split on the first = sign. As part of your build process, you cou...阅读全文

博文 2019-09-09 16:32:49 seamounts

golang应用快速搭建框架jotnar

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

Golang的WaitGroup陷阱

sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例子的样子写的,也没用深究过它的使用。前几日想着能不能在协程中执行Add()函数,答案是不能,这里介绍下。 陷阱在WaitGroup的3个函数的调用顺序上。先回顾下3个函数的功能: Add(delta int):给计数器增加delta,比如启动1个协程就增加1。 Done():协程退出前执行,把计数器减1。 Wait():阻塞等待计数器为0。 考一考 下面的程序是创建了协程father,然后father协程创建了10个子协程,main函数等待所有协程结束后退出,看看下面代码有没有什么问题? package main import ( "fmt" "sync" ) func fath...阅读全文

博文 2018-10-29 15:35:10 shitaibin

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 扣丁学堂

golang reflect库简单的例子

reflect库不常用,所有每次用的时候都要翻看文档,为了方便自己,特定写个例子 package main import ( "log" "reflect" ) type Info struct { Id int } func Log(format string, args ...interface{}) { log.Printf(format+"\n", args...) } func main() { log.SetFlags(log.Ldate | log.Lshortfile) // var i Info t := reflect.TypeOf(i) Log("name:%s", t.Name()) Log("string:%+v", t.String()) Log("kind:%+...阅读全文

博文 2019-06-08 15:32:39 golang推广大使

golang mac下开发环境的三种安装方法

golang 中文文档地址 http://docscn.studygolang.com/doc/ 若已经安装了go 旧版本,首先需要卸载已存在的版本 工作空间目录go 就是一个目录,其中包含三个子目录: src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包), pkg 目录包含包对象, bin 目录包含可执行命令。 一:Mac brew 安装go环境 1.安装go 软件 brew install go 在这里插入图片描述 2.查看golang 当前版本 go version 在这里插入图片描述 3.配置环境变量(只需要设置GOPATH和GOROOT 环境变量) ​ Mac brew 安装基本GOROOT 已经设置好了,只需要配置GOPATH 加入环境变量 查看当前golang环...阅读全文

博文 2019-08-02 09:02:41 码行大飞

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交叉编译

Golang从1.5版本起支持交叉编译,可以在一个平台上生成另一个平台的可执行程序,非常方便,交叉编译依赖于环境变量GOOS(操作系统),GOARCH(架构),CGO_ENABLED(是否启用cgo)。 Windows 下编译 Mac 和 Linux 64位可执行程序 SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go Mac下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build m...阅读全文

博文 2019-08-16 00:32:44 土豆吞噬者

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...]...阅读全文

go学习笔记(一)——环境搭建

go安装和配置 国内源下载 windows环境下,下一步安装法,即可完成安装 go中文文档 go包信息检索 go的常用命令 go包含的命令 如下图: go命令.png 常用命令 命令 可选参数 作用 备注 go build -o 指定输出名称 将go代码文件编译成可执行文件 默认输出名称为package名称,使用build时,会忽略已"_"和"."开头的文件 go install go clean 清理当前项目中的 go get 从远程仓库获取代码包 同python的pip go fmt -w 写入到源文件 代码标准格式化 go test 执行单元测试(文件名为*_test.go) IDE选择 1.atom 在atom上开发go 2. vs code 安装请至官网选择对应版本进行安装 vsc...阅读全文

博文 2020-02-08 01:32:41 落北忄

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

golang交叉编译

如win机器上可以编译linux,mac程序。 脚本Makefile 提供win,linux,mac 64位机器,还提供自动打包 make win 生成window可执行文件 make linux 生成linux二进制文件 make mac 生成mac 执行文件 #!/usr/bin/env bash fmt: gofmt -l -w ./ win: bindata window output/window/go-mygen.exe help linux:fmt set CGO_ENABLED=0 set GOARCH=amd64 set GOOS=linux go build -a -o output/linux/go-mygen . window:fmt set CGO_ENABLED=...阅读全文

博文 2020-03-26 17:40:41 百里江山

golang进行交叉编译

golang进行交叉编译 交叉编译即编译不同操作系统平台的可执行程序 golang执行交叉编译,只需要使用两个变量 - GOOS:目标操作系统 - GOARCH:目标操作系统的架构 根据下面这个表格指定就行了。 其中386指的是32位系统 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard + Lion) freebsd 386 / amd64 >= FreeBSD 7 windows 386 / amd64 >= Windows 2000 build命令的用法如下 usage: go build [-o output] [-i] [build flags]...阅读全文

博文 2020-03-27 06:32:42 泥之天空

go hello world

2. Hello World 建立 Go 工作区 在编写代码之前,我们首先应该建立 Go 的工作区(Workspace)。 在 Mac 或 Linux 操作系统下,Go 工作区应该设置在 $HOME/go。所以我们要在 $HOME 目录下创建 go 目录。 而在 Windows 下,工作区应该设置在 C:\Users\YourName\go。所以请将 go 目录放置在 C:\Users\YourName。 其实也可以通过设置 GOPATH 环境变量,用其他目录来作为工作区。但为了简单起见,我们采用上面提到的放置方法。 所有 Go 源文件都应该放置在工作区里的 src 目录下。请在刚添加的 go 目录下面创建目录 src。 所有 Go 项目都应该依次在 src 里面设置自己的子目录。我们在 s...阅读全文

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

Docker ps常用命令

查看 docker 容器,必然要用到 docker ps 命令。其基本格式为: docker ps [OPTIONS] 关键在于 OPTIONS(选项): image 1 常见用法 1. 最常见的用法 $ docker ps 显示当前正在运行的容器。 在 PORTS 一列,如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101,102,则会显示为 100-102/tcp。 2. 显示所有状态的容器 $ docker ps -a 容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。 3. 显示最后被创建的 n 个容器 $ docker ps -n 3 注意,这里不限状态。 ...阅读全文

golang-101-hacks(23)——io.Reader接口

注:本文是对golang-101-hacks中文翻译 io.Reader 是一个基础性的 且使用非常频繁的接口 type Reader interface { Read(p []byte) (n int, err error) } 对于实现了io.Readerr的接口类型,可以将它想象成一个管道。将内容写入管道的一端,通过实现了' Read() '方法的类型从管道的另一端读取内容。无论是普通文件,还是网络套接字。只要实现了io.Readerr的接口的类型,都可以读取其内容。 如下例所示 package main import ( "fmt" "io" "log" "os" ) func main() { file, err := os.Open("test.txt") if err != n...阅读全文

博文 2019-06-28 02:02:40 羊羽shine

从 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

愿码(ChainDesk.CN): Go语言入门指南(一)

第一章:Ubuntu的安装http://www.chaindesk.cn/witbook/13/172?20190301meiti第二章:Linux文件管理和常用命令http://www.chaindesk.cn/witbook/13/173?20190301meiti第三章:配置golang环境http://www.chaindesk.cn/witbook/13/174?20190301meiti第四章:第一个helloworld程序http://www.chaindesk.cn/witbook/13/175?20190301meiti第五章:安装goland集成开发工具http://www.chaindesk.cn/witbook/13/176?20190301meiti第六章:基本语法...阅读全文

博文 2019-03-01 12:34:43 ChainDesk

最新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

golang并发编程-20190624

进程 进程是操作系统进行资源分配的一个基本单元,由于描述程序执行的过程。 所有的进程都有父进程,所有的进程共同组成了一个树状结构 内核启动进程是所有进程的祖先,他自己作为自己的父进程 进程标识 内核对每个进程的属性和行为进行详细记录 pid就是这个唯一标识,pid为1的就是上面说的内核启动进程 image.png ppid就是当前进程的父进程 pid := os.Getpid() ppid := os.Getppid() 通过以上方法可以获取到对应的pid和ppid 进程空间 一个用户进程总会生存与用户的空间中 image.pn...阅读全文

Golang交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wind...阅读全文

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

Golang学习笔记-条件语句,循环语句

Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同: switch语句 switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。 func main() { a:=1 switch a { case 0: fmt.Println("a is 0") case 1: fmt.Println("a is 1") fallthrough case 2: fmt.Println("a is 2") } } 结果: a is 1 a is 2 switch支持任何类型的判断,例如下面的string: func main() { var fruitName="apple" switch f...阅读全文

博文 2019-09-27 23:33:01 aside section ._1OhGeD

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 雪之梦技术驿站

编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wind...阅读全文

博文 2020-02-03 19:32:41 风亡小窝

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

golang交叉编译

Linux系统下编译Windows64位系统、Mac系统可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go Mac系统下编译Linux系统、Windows64位系统可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Windows系统下编译Linux系统、Mac系统可执行程序 SET CGO_ENABLED=0 SET GOOS...阅读全文

使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

摘要: 使用 odps console 的同学,可能都使用过 odps 安全相关的命令。 转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令。官方文档上有详细的 odps [安全指南](https://help.aliyun.com/document_detail/27924.html?spm=a2c4e.11153959.blogcont62331.18.297126631sJdNX),并给出了[安全相关命令列表](https://help.aliyun.com/document_detail/27939.html?spm=a2c4e.11153959.blogcont62331.19.297126631sJ...阅读全文

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 雪之梦技术驿站

golang开发笔记

go build 不同系统 Mac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go Linux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go Windows下编译Mac, Linux平台的64位可执行程序: SET CGO_ENAB...阅读全文

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