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

Go语言学习笔记(七)之方法

在面对对象编程(OOP),我们常把某个对象实现的具体行为的函数称作方法。例如 C++中A类的某个函数实现了某种行为,我们就叫做 A 的方法。在 golang 中如果要定义一个方法,只需要在函数声明时,在函数名前加上某个变量,即该变量实现了某个方法。 ##### 方法声明 ```go type Point struct{ X, Y float64 } //按照传统方法,我们可能会按照下面的方式来写 func Distance(p, q Point) float64 { return math.Hypot(q.X - p.X, q.Y - p.Y) } //但在 go 语言中则是这样 func (p Point) Distance(q Point) float64 { return math.H...阅读全文

博文 2019-04-13 16:19:16 goelo

自己动手,写一个json2xml小工具

项目地址:json2xml 什么是antlr antlr(ANother Tool for Language Recognition)是一个强大的语法分析器生成工具,它可用于读取,处理,执行和翻译结构化的文本和二进制文件。目前,该工具广泛应用于学术和工业生产领域,同时也是众多语言,工具和框架的基础。今天我们就用这个工具实现一个go语言版的json2xml转换器; antlr的作用 关于一门语言的语法描述叫做grammar, 该工具能够为该语言生成语法解析器,并自动建立语法分析数AST,同时antlr也能自动生成数的遍历器,极大地降低手工coding 语法解析器的成本; 实践开始 言归正传,拿json2xml为例,实现一个工具; 安装 以macOS为例 brew install antlr 编...阅读全文

博文 2018-05-28 12:34:38 yyt030

go开发环境部署

国内资源Go语言中文网https://studygolang.com/dl 一、下载安装包 wget https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz 二、解压安装注:go安装包是已经编译,直接将解压后的包放置在/usr/local/下 tar zxvf go1.11.linux-amd64.tar.gz -C /usr/local 三、配置go环境变量 vim /etc/profile export GOROOT=/usr/local/goexport GOPATH=/home/go_codeexport GOBIN=/usr/local/go/binexport PATH=$PATH:$GOROOT source /e...阅读全文

博文 2019-06-04 00:33:12 IT职场小白

从零开始搭建MongoDB数据库服务

摘要: 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 首先介绍一下『数据库即服务』。 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 _MongoDB_004_jpeg _MongoDB_005_jpeg 首先介绍一下『数据库即服务』。『数据库即服务』其实是『Database-as-a-serv...阅读全文

DockOne微信分享(一一五):基于Neutron的Kubernetes SDN实践经验之谈

【编者的话】本次分享将给大家介绍Kubernetes的网络通信原理,并介绍几种典型的Kubernetes网络实现方案。最后分享下我们公司ECP容器管理平台的在Neutron基础上为Kubernetes实现的SDN方案(Skynet)实践经验和演进。 【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述和架构、部署和核心机制分析、进阶篇——Kubernetes调工作原理及源码分析等。 首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景。 CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范、参数规范、响应规范等等。CNI只要求在容器创建时为容器分配网络资源、删除容器时释放网络...阅读全文

博文 2017-06-25 16:25:36 swordboy

Docker应用详细解析(一) —— 在macOS上使用Docker(一)

版本记录 版本号 时间 V1.0 2018.11.17 星期六 前言 Docker是一个跨平台的轻量级虚拟机,可移植性非常高,一次部署,终生可用。Docker可以在Linux、Windows、MacOS等平台上安装使用。接下来几篇我们就一起看一下Docker相关的内容。 开始 Docker是一种工具,可以轻松地在容器中运行应用程序。 容器提供隔离和安全性,如虚拟机,但它们要小得多,因为它们在主机系统中运行。 作为iOS开发人员,您为什么要使用Docker? 避免版本问题 - 运行操作系统版本,编程语言,数据库应用程序,Web应用程序和Web服务器,机器学习程序 - 所有这些都在隔离的环境中,以避免Mac上安装的任何其他副作用。 在本教程中,您将熟悉Docker词汇表和用于创建,检查和删除容器...阅读全文

博文 2018-11-18 03:34:40 刀客传奇

从nginx热更新聊一聊Golang中的服务器热更新(上)

静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本? 最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新 1. 热更新是什么? 简单翻译成人类可读的实例是如下这个样子: 举个例子,你现在在坐卡车,卡车开到了150KM/H 然后,有个轮胎,爆了 然后,司机说,你就直接换吧,我不停车。你小心点换 嗯。就这个意思 2.网关中的热更新 服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的...阅读全文

博文 2019-03-14 03:34:40 Lateautumn_Lin

golang

博客 www.liwenzhou.com 代理 goproxy.io 查看go的配置 go env 初始化 go mod init xxxx 文件结构 bin pkg src 打包 运行 安装环境和各种基本命令见这个url https://www.liwenzhou.com/posts/Go/install_go_dev/ go build 打包成exe,执行exe go build -o xxx.exe 打包成xxx.exe go run 执行某个go文件 go install 打包&拷贝 Mac 下编译 Linux 和 Windows平台 64位 可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build CGO_ENABLED=0 GOO...阅读全文

博文 2020-03-19 15:33:19 任我笑笑

Golang程序调试工具介绍(gdb vs dlv)

通过log库输出日志,我们可以对程序进行异常分析和问题追踪。但有时候,我也希望能有更直接的程序跟踪及定位工具能够帮助我们更方便快捷的追踪、定位问题,最直观的感觉还是使用调试器。Linux平台下,原生的C/C++程序,我们往往使用gdb进行程序调试,切换到Golang,我们同样还是可以使用gdb进行调试。同时我们还可以使用golang实现的调试器dlv进行调试。以下内容是我对gdb以及dlv使用及对比总结 准备工作 为展示整个调试过程,准备了一个演示项目GoDbg,整个目录结构如下所示 [lday@alex GoDbg]$ tree . ├── main.go └── mylib └── dbgTest.go 其中,main.go为主函数入口,而dbgTest.go启动多个goroutine,...阅读全文

博文 2018-08-27 10:35:00 豆瓣奶茶

Go基础学习记录之Session和Cookie

Session和Cookie session和cookie是两个非常常见的Web概念,也很容易被误解。但是,它们对于页面授权以及收集页面统计信息非常重要。我们来看看这两个用例。 假设我们要抓取限制公共访问的页面,例如Twitter用户的主页。当然,您可以打开浏览器并输入用户名和密码来登录和访问该信息,但所谓的“网络爬行”意味着我们使用程序自动执行此过程而无需任何人为干预。因此,当我们使用浏览器登录时,我们必须找出幕后的真实情况。 当我们第一次收到登录页面并输入用户名和密码时,按下“登录”按钮后,浏览器会向远程服务器发送POST请求。服务器验证登录信息并返回HTTP响应后,浏览器重定向到用户主页。这里的问题是,服务器如何知道我们拥有所需网页的访问权限?由于HTTP是无状态的,因此服务器无法知道...阅读全文

博文 2018-10-24 15:34:47 DurbanZhang

关于路由

**自学习golang以来,无论是beego还是web.go亦或是站长大人的dreamgo的路由,感觉都不明白是怎么写的,下面我把自己的一种实现方式给写出来,希望大家指点一二。** `目录结构` ``` web controller index.go xxx router route.go util util.go view index.html main.go #入口 ``` `web入口路由handler处理` ``` func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } ...阅读全文

golang切片

数组的长度在定义后无法再次修改,数组是值类型,每次传递都会产生一份副本,显然这种数据结构无法满足正式开发的需求,为此golang提供了数组切片 数组切片就像是一个指向数组的指针,数组切片有自己的数据结构,而不仅是一个指针。 切片的定义 切片可以通过make()创建 格式 make([]type , 长度 ,容量),如: a := make([]int, 10, 10) 上面演示了创建一个类型为int,长度为10的切片 slice是可变长的,长度表示的是数组的出始长度,容量表示slice可以容纳的元素容量,容量未设置时,默认容量等于数组长度,slice的长度和容量分别可以使用 len() 与 cap() 获得 slice也可以使用数组来生成 格式 array[start:end] start表...阅读全文

博文 2019-04-30 09:34:42 我傻笑你跑掉

​使用BSN一天学会区块链开发-C#篇

作者:曹国波《使用BSN一天学会区块链开发》系列文章可以帮助具有一定开发经验的开发者,在不需要学习区块链开发语言的情况下,在区块链服务网络(BSN)上完成区块链应用的开发。本文主要介绍用户如何通过链下业务系统使用C#语言与链上数据进行交互而进行的相关操作流程说明,但在说明链下业务系统与链上进行数据交互之前,首先对用户如何在区块链服务门户注册、应用发布服务、应用服务参与以及应用管理进行一一说明。注册和登录打开区块链服务网络网址:www.bsnbase.com, 点击登录页面中的【内测申请】按钮进入内测申请页: 根据页面中的提示填写内测申请信息并提交内测申请,内测申请用户分为个人用户和企业用户两种,申请人应根据自己的用户类型任选一种进行申请, 内测申请提交后需等待系统审核,待系统审核通过后将向申...阅读全文

博文 2020-01-08 19:33:22 区块链服务网络BSN

Go 中 io 包的使用方法

前言 在 Go 中,输入和输出操作是使用原语实现的,这些原语将数据模拟成可读的或可写的字节流。为此,Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出,如图: Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作本文重点介绍如何实现标准库中 io.Reader 和 io.Writer 两个接口,来完成流式传输数据。 io.Reader io.Reader 表示一个读取器,它将数据从某个资源读取到传输缓冲区。在缓冲区中,数据可以被流式传输和使用。如图: 对于要用作读取器的类型,它必须实现 io.Reader 接口的唯一一个方法 Read(p []byte)。换句话说,只要实现了 Read(p []byte) ,那它就是一个...阅读全文

博文 2018-07-11 11:34:44 simon

[译] part 20: golang 并发介绍

文地址:Part 22: Introduction to Concurrency 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 Go 是一种并发语言,而不是并行语言。在讨论如何在 Go 中处理并发之前,我们必须首先了解什么是并发以及它与并行性的不同之处。 什么是并发 并发是指有处理多个事情的能力,用一个例子来解释。 可以比做一个人慢跑。在他早晨慢跑时,发现鞋带已经松了。然后,这个人停止了跑步,绑鞋带,然后又开始跑步。这是并发的典型示例。这个人能够处理跑步和系鞋带,也就是说,这个人能够处理很多事情,强调一段时间内能做多个事情 :) 什么是并行,它与并发有什么不同 并行性是指同时做了很多事情。它可能听起来类似于并发,但它实际上是不同的。 我们还是用慢跑的例子来理解,我们假设这个人...阅读全文

博文 2019-04-02 00:34:38 咔叽咔叽_7647

Golang 游戏leaf系列(二) 网络消息流程概述

最开始接触到Leaf,就是被它的网络消息功能吸引的。那么先看看这部分功能吧。从文档中得知: Leaf 可以单独使用 TCP 协议或 WebSocket 协议,也可以同时使用两者,换而言之,服务器可以同时接受 TCP 连接和 WebSocket 连接,对开发者而言消息来自 TCP 还是 WebSocket 是完全透明的。 一、network和gate 这个功能在源码中是如何实现的呢,看看network目录下tcp开头的,和ws开头的,有xx_conn,xx_msg,xx_server,正好各有3个文件。在conn.go里有个Conn interface,所以xx_conn肯定是实现这个接口的两个不同类型。按照这个思路,顺便看一下processor.go里的解析器接口,也是有json.go和pr...阅读全文

博文 2019-05-28 21:34:45 懒皮

golang goquery selector(选择器) 示例大全

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 最近研究Go爬虫相关的知识,使用到goquery这个库比较多,尤其是对爬取到的HTML进行选择和查找匹配的内容时,goquery的选择器使用尤其多,而且还有很多不常用但又很有用的选择器,这里总结下,以供参考。 如果大家以前做过前端开发,对jquery不会陌生,goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。 基于HTML Element 元素的选择器这个比较简单,就是基于a,p等这些HTML的基本元素进行选择,这种直接使用Element名称作为选...阅读全文

利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的 zookeeper是什么? Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图: 具体思路 看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服...阅读全文

Go基础学习记录 - 编写Web应用程序 - 重新调整项目目录结构(二)

载Go基础学习记录 - 编写Web应用程序 - 重新调整项目目录结构(二)上篇文章整理了一部分的文件结构,本次再将剩余的一部分也处理下,其实很小的一部分, 将main中makeHandler函数处理掉,封装到我们看起来还算比较方便的归类中,创建文件 helpers/handler.go package helpers import ( "net/http" "regexp" ) var validPath = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$") // MakeHandler 处理路由函数 func MakeHandler(fn func(http.ResponseWriter, *http.Request, str...阅读全文

博文 2018-08-15 23:34:53 DurbanZhang

Golang Merge多个channel的response到一个channel中

package orch type Orch struct { } func New() *Orch { return &Orch{} } func (orch *Orch) Or(channels ...<-chan interface{}) <-chan interface{} { switch len(channels) { case 0: return nil case 1: return channels[0] } orDone := make(chan interface{}) go func() { defer close(orDone) switch len(channels) { case 2: select { case <-channels[0]: case <-cha...阅读全文

博文 2019-06-14 18:02:41 FredricZhu

另一个go命令行参数处理器 - cmdr

cmdr 是另一个命令行参数处理器(Golang)。 Golang 自己带有 flags 进行命令行参数处理,算是便利的,然而和 Google 一贯的做法相同,非常独,非常反人类。 在计算机人机交互界面的历史上,命令行的交互方式只有一种是贯穿始终,得到传承和延续的,那就是 getopt 以及 getopt_long。说起 getopt 来也可以讲述一个怪长的故事,然而本文不做此打算。无论如何,你需要知道的就是,getopt及其交互界面已经是POSIX的一部分,一个卓有成效的程序员、开发者、科学家,或者计算机从业者,对于这个界面都已经是训练有素,无需成本了。你可能在用着它,但你或许只是没有意识到它的存在而已。GNU的大部分命令行小刀都采用了这样的界面,所以,例如tar, gwk, gzip, ...阅读全文

建站宝盒到底有多大的威力令人为之痴迷?

建站宝盒是针对中小企业用户建站需求而打造的一款自助建站系统。用户只需通过在线申请账号和密码的方式建网站,不用自己上传源代码,只需登录网站管理系统即可选择网站模板风格、上传文字和图片内容、设置网站栏目、维护网站内容,其针对不同行业特点精心设计的网站栏目和网页风格。 此外,建站宝盒支持三种语言中文版网站、繁体版网站、英文版网站、运用功能强大的管理平台。建站宝盒大大节省建立网站的成本,极大地缩短了企业建站的时间。 ![5.jpg](https://static.studygolang.com/180427/a0738317884ddcaeebd9d5b132fd9a31.jpg) 简单易用 强大灵活 传统网站建设做出的网站管理后台功能简单,后期维护、网站建设周期长,修改...阅读全文

Golang 网络编程丝绸之路 - TCP/UDP 地址解析

TL;DR 在使用 Golang 编写 TCP/UDP socket 的时候,第一步做的就是地址解析。 func ResolveTCPAddr(network, address string) (*TCPAddr, error) func ResolveUDPAddr(network, address string) (*UDPAddr, error) 下面是对这两个函数的源码分析。 ResolveTCPAddr 该函数返回的地址包含的信息如下: // src/net/tcpsock.go type TCPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone } TCPAddr 里,IP 既可以是 IP...阅读全文

博文 2019-06-08 23:32:43 LeonHuayra

RabbitMQ系列笔记介绍篇

导语 rabbitMQ是市面上应用很广的一种应用间传送数据的通信方式,是由erlang语言开发,主要特点就是异步通信,实现服务与服务之间的解耦。特点可靠性:提供了持久化、传输时确认、发布时确认、跟踪机制灵活的路由:有四种交换器负责分发路由集群:支持集群多种协议:支持STOMP、和MQTT协议多语言:支持大部分流行语言友好的界面:提供了直观的管理界面可扩展:提供了许多插件。应用场景高并发排队机制:比如在秒杀场景,提示用户正在等待,在队列里存放了有序的待处理的消息,而不是所有的消息杂乱无章服务之间的解耦:服务之间可通过发布订阅的模式,让Rabbitmq队列通知订阅了该消息的服务执行相关代码。工作机制在其通信的过程中,有两个重要的角色,分别是生产者和消费者,需要强调的是RabbitMQ服务器并不产...阅读全文

博文 2019-08-10 16:32:49 陌无崖

大数据Hadoop框架主要模块 hadoop培训周末班

Hadoop是一个用Java编写的Apache开源框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。Hadoop框架工作的应用程序在跨计算机集群提供分布式存储和计算的环境中工作。Hadoop旨在从单个服务器扩展到数千个机器,每个都提供本地计算和存储。 **Hadoop框架包括以下四个模块:** **Hadoop Common**: 这些是其他Hadoop模块所需的Java库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的Java文件和脚本。 **Hadoop YARN**: 这是一个用于作业调度和集群资源管理的框架。 **Hadoop Distributed File System (HDFS™)**: 分布式文件系统,提供对应...阅读全文

Hadoop中HDFS优点有哪些?

随着互联网数据规模的不断增大,对文件存储系统提出了更高的要求,需要更大的容量、更好的性能以及更高安全性的文件存储系统,与传统分布式文件系统一样,HDFS分布式文件系统也是通过计算机网络与节点相连,但也有优于传统分布式文件系统的优点。 **1. 支持超大文件** HDFS分布式文件系统具有很大的数据集,可以存储TB或PB级别的超大数据文件,能够提供比较高的数据传输带宽与数据访问吞吐量,相应的,HDFS开放了一些POSIX的必须接口,容许流式访问文件系统的数据。 **2. 高容错性能** HDFS面向的是成百上千的服务器集群,每台服务器上存储着文件系统的部分数据,在集群的环境中,硬件故障是常见的问题,这就意味着总是有一部分硬件因各种原因而无法工作,因此,错误检测和快速、自...阅读全文

消息传输模型的思考

一、消息传输模型 从消息传输模型上,大致可以抽象为以下几种: (1)点对点模型(Point-to-point) 基础模型中,只有一个发送者、一个接收者和一个分布式队列。 在P2P模型中,有几个关键术语:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中) 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。 接收者在成功接收消息之后需向队列应答成功。 如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模型。...阅读全文

博文 2019-07-23 02:32:39 AWeiLoveAndroid

GO语言的修饰器编程

之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程的模式...阅读全文

博文 2017-06-02 08:03:21 徐学良

go垃圾回收

GC算法 1. 引用计数 每个单元维护一个域,保存其他单元指向它的引用数量,当引用的数量为0时,将其回收。 优点: 算法易实现 内存管理与用户程序交织在一起,将GC的代价分散到整个程序,不用STW 缺点 不能处理循环引用 维护引用计数降低运行效率 2. 标记-清扫 是一种自动内存管理,基于追踪的垃圾收集算法。垃圾回收程序对所有的存活单元进行一次全局遍历确定哪些单元可以回收。算法分为两部分:标记和清扫。标记阶段表明所有存活单元,清扫阶段将垃圾回收。 优点: 避免了引用计数不能处理循环引用的缺点 缺点: STW(挂起程序) 三色标记算法:对标记阶段的改进(标记过程和用户程序并发进行) 起初所有对象都是白色 从根出发扫描所有可达对象,标记为灰色,放入待处理队列 从队列取出灰色对象,将其引用对象标记...阅读全文

高中生也能读懂的Docker入门教程

Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker?本文,就针对上述提到的问题,来简单介绍下 Docker。什么是 DockerDocker 是开源的应用容器引擎。Docker 可以让你将所有应用软件以及它的以来打包成软件开发的标准化单元。Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的...阅读全文

将文件嵌入go代码,你的可执行程序可以携带其他文件了

```go package main import ( "compress/zlib" "fmt" "io" "log" "os" "path/filepath" ) func main() { type fileInfo struct { file string size int64 } fileList := make(map[string]fileInfo, len(os.Args)) for _, v := range os.Args[1:] { if f, err := os.Stat(v); err == nil || os.IsExist(err) { fileList[filepath.Base(v)] = fileInfo{file: v, size: f.Size()} ...阅读全文

博文 2019-10-09 10:31:50 jan-bar

选择编程语言,重点是看你想做什么开发,而不是乱学编程语言!

选哪一种程序语言, 看哪一种程序语言比较有前途,主要是看你做什么。主要的现实情况是你不可能把所有语言都用一遍,做一个项目可能选几种语言就够了。 JavaScript如果你做前端的话,你javascript一定要懂,type script一定要懂。懂了java script,你还可以做后端的note js。也可以做unity 3d的游戏编程。也可以做react native 手机端的编程。传统网页的编写也离不了这门语言。java如果你做后端的话,语言选择的空间就大很多。首屈一指的就是java。这门语言是当之无愧的,程序员数量最多的语言。使用Java:可以做spring boot的后台的API的编写。也可以做spring mvc的传统的网络程序编写。再老一点的话,还可以写桌面程序。等等。 c++...阅读全文

博文 2019-07-25 02:32:41 学习编程__

TiDB Markdown Plugin - 在你的Markdown文档中运行一个真实的数据库示例

TiDB Markdown Plugin Repo: https://github.com/imiskolee/tidb-wasm-markdown一款可以让TiDB运行在Markdown中的插件。 背景 周三看到朋友圈在疯狂的刷 TiDB - Wasm 这个有意思的东西(让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案)。这的确是一件让人兴奋的工作成果,为WASM的应用提供了不错的思路。就这个项目本身而言也是有很大的价值。 我们在编程语言学习的时候,有诸如JSFiddle、Go Playground等很多不同的交互性环境可以使用,并且可以将这些环境内嵌到教学文章之中,形成了交互性的教学资料。但是在数据库的文章之中,只能是纯粹的纸上谈兵,读者很难进行直观的感受与实操。...阅读全文

利用 ApsaraDB For SQL Server各版本高效而低廉地实现关键业务需求

1. 什么是SQL Server多版本 微软的SQL Server除了不断迭代的版本升级外,还有从功能差异上分为几个不同的版本。 SQL Server 2012有企业版、商务智能版、标准版、开发版、Web版,当然还有一个入门版本Express。SQL Server2014/2016,只有企业版、标准版、开发版、Web版,也有一个入门版本Express。这些版本的应用场景是不同的,这里有详细的解释: Enterprise 作为高级版本,SQL Server Enterprise 版提供了全面的高端数据中心功能,性能极为快捷、虚拟化不受限制,还具有端到端的商业智能 ,可为关键任务工作负荷提供较高服务级别,支持最终用户访问深层数据。 Standard SQL Server...阅读全文

一个简单的 HTTP 服务器 (三) (go语言)

// http.go package main import ( "log" "net/http" "time" ) func main() { server := &http.Server{ Addr: ":8888", WriteTimeout: 2 * time.Second, } mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) server.Handler = mux log.Println("Starting server ...") log.Fatal(server.ListenAndServe()) } type myHandler struct{} f...阅读全文

博文 2017-04-23 13:00:41 痞子汤

go语言

1. go语言结构 Go 语言的基础组成有以下几个部分: 包声明引入包函数变量语句 & 表达式注释 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。下一行 /*...*/ 是...阅读全文

博文 2018-01-15 16:31:01 wangzhanzheng

1小时掌握SVN版本控制系统

课程介绍 SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。 课时列表 • 课时1:SVN的配置及使用(SVN简介) • 课时2:SVN的配置及使用(搭建SVN服务器端) • 课时3:SVN的配置及使用(配置SVN客户端) • 课时4:SVN的配置及使用(项目发布与检出) • 课时5:SVN的配置及使用(冲突解决) 开始学习http://click.aliyun.com/m/27888/...阅读全文

Go与用户交互demo

大学里大家应该基本上都写过一些和控制台进行交互的课后作业,下面是一个go版本的简单交互程序。 package main import ( "bufio" "fmt" "os" ) func main() { in := bufio.NewReader(os.Stdin) // 声明并初始化读取器 fmt.Println("What is your name?") input, err := in.ReadString('\n') // 以回车为分隔符 if err != nil { fmt.Printf("oh, get error: %v\n", err) return } name := input[:len(input)-1] // 去除回车 fmt.Printf("Hello, %s...阅读全文

博文 2020-02-25 13:32:43 iuoui

Golang之iOS自动化接口测试(一)需求简介

1.为什么要搞这种东西? 1.测试资源不够 ,没有时间测试iOS的需求 2.因为平时测试的不多, 所以对上报等问题总是漏测 3.会有一些改动, 会影响之前的一些上报逻辑 4.想自己跑一边所有的上报逻辑, 展示上报, 点击上报, trace上报等 2.为什么选择了Golang? 1.以前用python写过自动化的iOS app安装, 脱壳,打开,卸载等操作,想试试其他的方法. 2.考虑并尝试了privoxy , anyproxy ,对https的代理返回等都不够友好,花了很多时间没弄好,anyproxy有些https抓不到, 也不知道什么原因, 但是挺好写 3.同事跟我说要不试试golang, 看了下, 感觉可以符合需求, 还能学习新的知识点 安排 3.大致思路 1.因为我要测试的是SDK ,...阅读全文

博文 2020-04-30 21:32:54 西博尔

TCP连接的状态变迁

全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

ishell:创建交互式cli应用程序库

ishell是一个用于创建交互式cli应用程序的交互式shell库。 最近在研究supervisor的源码,参考supervisor的架构,做公司的项目。我后面会给出supervisor的开源学习的总结。github上有一个gopher写了一个golang版的supervisor,源码,原理和python版的都类似,但是 ctl是执行命令的方式,不是很优雅。 今天这篇文章介绍一个go的包,实现交互式的CLI工具的包。 常见的cli包有:flag、cli、os...都可以实现 但是上面有一个问题,就是执行完以后,就会给出结果,并退出,不是进入一个shell中,执行所有结果都是不同的。 交互式的cli如下: 今天要介绍的库是 ishell 类似上面的gif图中效果,很容易实现 代码示例 impo...阅读全文

博文 2019-01-30 04:34:45 若与

Golang并发和并行,内存分配及GC相关

并发(concurreny)和并行(parallellism) 并发是指两个或者两个以上的任务在一段时间内被执行,我们不关心这些任务在某一个时间点是否同时执行,可能同时执行也可能不是,我们只关心在一段时间内,是否执行解决了两个或者两个以上的任务 并行:两个或者两个以上的任务在同一时刻被执行 并发说的是逻辑上的概念,并行强调的物理运行状态,并发包含并行 Go实现了这两种并发形式:第一种是普遍认知的多线程共享内存, 还有一种就是csp并发模型,csp讲究通过通信共享内存 其实无论语言层面怎么实现到了操作系统层面,一定是通过线程的形态存在的,而操作系统根据访问权限的不同,体系架构可以分为用户空间和内核空间,内核空间主要负责访问cpu资源,io,内存等硬件资源,为上层应用提供最基础的基础资源,用户空...阅读全文

博文 2019-05-06 15:46:51 黑手党老k

读文章 《优雅关闭的 Go Web 服务器》

[读 "优雅关闭的 Go Web 服务器" ](https://github.com/stayfoo/stayfoo-hub/blob/master/docs/golang/read-article/1、read-优雅关闭的GoWeb服务器.md) GitHub 仓库:https://github.com/stayfoo/stayfoo-hub > 文章原文链接:[Go语言中文网](https://mp.weixin.qq.com/s/rA_oh472ZhfcAsAkWyyXFA) : https://mp.weixin.qq.com/s/rA_oh472ZhfcAsAkWyyXFA 文章《优雅的关闭 `Go Web` 服务器》写到:可以通过开启一个单独的 `goroutine` 拦截关闭信...阅读全文

博文 2019-08-31 19:59:13 stayfoo

Mybatis架构与原理

MyBatis功能架构设计​image.png功能架构讲解:我们把Mybatis的功能架构分为三层:(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。框架架构​框架架构讲解:这张图从上往下看。MyBatis的初始化,会从mybatis-config.xml配置文件,解析构造成Configurat...阅读全文

博文 2018-09-17 15:15:35 Java1122zzz

Centrifugo(二)基本使用

Centrifugo 是一个用 Golang 实现的基于 Websocket 或者 SockJS 的实时通信平台。 基本运行框架: 基本运行框架 Centrifugo 的使用场景一般涉及三个部分:客户端(前端)、应用程序(后端)和 Centrifugo。当然,也可以只有客户端和 Centrifugo。基本使用流程如下: 下载并安装Centrifugo,推荐使用 docker 方式。 创建基础配置文件,设置 secret 和 api_key。配置文件(config.json)可以通过命令自动创建: ./centrifugo genconfig 在后端应用程序中设置三个变量:Centrifugo secret、Centrifugo API Key、Centrifugo API address。C...阅读全文

Golang之import和package

package 1、package是golang最基本的分发单位和工程管理中依赖关系的体现2、每个golang源代码文件开头都拥有一个package声明,表示该golang代码所属的package。3、要生成golang可执行程序,必须建立一个名为main的package,并且在该package中必须包含一个名为main()的函数。4、在golang工程中,同一个路径下只能存在一个package,一个package可以拆成多个源文件组成。5、import关键字导入的是package路径,而在源文件中使用package时,才需要package名。经常可见的import的目录名和源文件中使用的package名一致容易造成import关键字后即是package名的错觉,真正使用时,这两者可以不同...阅读全文

博文 2020-02-10 05:32:39 你仲夏未归

golang学习之struct

结构体定义的一般方式如下: type identifier struct { field1 type1 field2 type2 ... } type T struct {a, b int} 也是合法的语法,它更适用于简单的结构体。 var t *T t = new(T) 变量 t 是一个指向 T的指针,此时结构体字段的值是它们所属类型的零值,使用 new 函数给一个新的结构体变量分配内存,它返回指向已分配内存的指针。 无论变量是一个结构体类型还是一个结构体类型指针,都使用同样的 选择器符(selector-notation) 来引用结构体的字段,即: type myStruct struct { i int } var v myStruct // v是结构体类型变量 var p *mySt...阅读全文

博文 2016-11-08 13:00:12 caiyezi

1.Golang的Http源码阅读(http协议)

解释服务器的几个概念: Request 用户请求的信息 Response 服务器返回的信息 Conn 用户的每次请求链接 Handler 处理请求和生成返回信息的处理逻辑 先写个小程序看看 func MyConn() { // 监听9090端口 listener, _ := net.Listen("tcp", "localhost:9090") defer listener.Close() // 建立用户请求的连接 conn, _ := listener.Accept() defer conn.Close() // 读取Request的内容 buff := make([]byte, 10000) len, _ := conn.Read(buff) fmt.Fprintln(os.Stdout...阅读全文

博文 2018-07-26 10:35:00 geange