精华内容
下载资源
问答
  • 采用Go编写的跨平台PoC勒索软件
  • 采用Go编写的HTML图像库软件。 它可以为您照片提供非常简约HTML画廊。
  • awesome-go-China:精选由华裔编写的Go框架,库和软件
  • Go语言编写的用于Minecraft(基础版)软件的瑞士军刀 总览 gophertunnel由几个软件包组成,可用于创建Minecraft相关工具。 在可以找到所有软件包简要概述。 例子 可以在找到有关如何拨号连接或启动服务器示例。 ...
  • Go3D软件渲染。 没有OpenGL,没有C扩展,没什么。 关于 就像OpenGL,但事实并非如此。 是FauxGL。 它不使用您图形卡,仅使用您CPU。 因此它很慢并且不适合实时渲染。 但是它仍然非常快。 它工作方式与...
  • GO程序汇编: Golang最佳做法基本实施 介面 依赖注入 模拟 并发 选择陈述
  • Dragonfly是用Go语言编写的Minecraft Bedrock Edition服务器软件。 它在编写时就牢记了可伸缩性和简单性,旨在简化设置服务器和对其进行修改过程。 建立 当前没有可用预构建可执行文件。 蜻蜓进入更稳定阶段后...
  • 301 cchess go的打谱软件,系统的编写以及ida相关,7-94都可以用的,很好
  • Pholcus(幽灵蛛)是一款纯Go语言编写的重量级爬虫软件,清新GUI界面,优雅爬虫规则、可控高并发、任意批量任务、多种输出方式、大量Demo,支持横纵向两种抓取模式,支持模拟登录和任务取消等,并且考虑了...

    Pholcus(幽灵蛛)是一款纯Go语言编写的重量级爬虫软件,清新的GUI界面,优雅的爬虫规则、可控的高并发、任意的批量任务、多种输出方式、大量Demo,支持横纵向两种抓取模式,支持模拟登录和任务取消等,并且考虑了支持分布式布局。

    框架模块


    09bc63d2c55a99b78c9d7761fffff9067ca39ed3

    文章转载自 开源中国社区 [http://www.oschina.net]

    展开全文
  • 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAIGo,或许从诞生之日起就没想过。自己会以这种方式成为语言中C位:最新数据显示,Go语言成为恶意软件的最爱。4年内基于Go语言恶...
    杨净 发自 凹非寺
    量子位 报道 | 公众号 QbitAI

    Go,或许从诞生之日起就没想过。

    自己会以这种方式成为语言中的C位:

    最新数据显示,Go语言成为恶意软件的最爱。

    4年内基于Go语言的恶意软件数量飙增2000%

    甚至,这正在成为一种趋势。

    报告的提供者,网络安全公司Intezer指出,

    恶意软件生态系统已经出现一个普遍趋势,即恶意软件作者已经慢慢从C和C++转向 Go。

    预计Golang的使用率在未来几年将继续上升,并与C、C++和Python一起,成为未来恶意软件编码的首选编程语言。

    消息一出,不少网友纷纷为Go鸣不平。

    我直接懵了,这事也要Golang组织管?

    恶意软件选择Go的原因

    即便如此,但也总不能让Go莫名其妙的背锅吧!

    Intezer报告里也直截了当地列出了原因,主要有三个。

    首先,Go支持跨平台编译

    开发者只需要编写一次代码,就可以从同一个代码库中编译出多个平台的二进制文件,包括Windows、Linux和Mac系统。

    这种通用性是很多编程语言不具备的。

    其次,安全人员很难对 Go 语言生成的二进制文件进行反编译和逆向工程

    因此导致 Go 语言编写的恶意程序检出率很低。

    第三个原因则与Go对网络数据包和请求的工作支持有关。

    Intezer解释道,

    Go有一个非常好写的网络栈,很容易使用。

    Go已经成为云的编程语言之一,很多云原生应用都是用它编写的。例如,Docker、Kubernetes、InfluxDB、Traefik、Terraform、CockroachDB、Prometheus和Consul都是用Go编写的。

    因此开发者更容易继续使用Go语言来写网络工具。

    实际上,当年(2007年)谷歌设计创建Go语言,其中一个原因用更好的语言取代谷歌内部使用的C++网络服务。

    这样看,也算是情理之中。

    Intezer还表示,2019年之前还很少有人使用Go语言来编码恶意软件,但在2019年开始,就逐渐开始形成风潮。

    如今, 大量的黑客、安全团队都倾向于使用Go语言,不仅可以用来创建恶意软件,也可用来制作渗透测试工具包。

    值得一提的是,这当中许多恶意软件都是针对 Linux 和 IoT 物联网设备的,可以用来挖矿或感染设备,以便用于为DDoS攻击准备的僵尸网络。

    此外,勒索软件使用Go语言也十分普遍。

    在报告的结尾处,Intezer还列举了一些在过去一年中出现Go编写的恶意软件。

    对于这样一份报告,在中文开源社区OSCHINA上引发了热切的讨论。

    有网友给Go语言正名:问题不在Go。

    还有人说,

    做菜刀的人如何制止使用菜刀的罪犯?

    当然也有人“换个角度想想”:也说明Go火了啊!

    报告传送门:
    https://www.intezer.com/wp-content/uploads/2021/02/Intezer-2020-Go-Malware-Round-Up.pdf
    参考链接:
    https://www.zdnet.com/article/go-malware-is-now-common-having-been-adopted-by-both-apts-and-e-crime-groups/
    https://www.oschina.net/news/131384/go-malware-2020

    —  —

    本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

    点这里????关注我,记得标星,么么哒~

    加入AI社群,拓展你的AI行业人脉

    量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展

    一键三连「分享」、「点赞」和「在看」

    科技前沿进展日日相见~

    展开全文
  • Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/csv/excel等)、有大量Demo...
  • Go语言编写的Ruby VM旨在通过软件事务存储来利用并行性。 建造 git clone https://github.com/brucehsu/GobiesVM.git cd GobiesVM make goenv source goenv make 可执行文件将放置在bin/ 。 用法 gobiesvm ...
  • Go编写的NES模拟器。 开始运行 awesomenes用途sdl2用于呈现和输入处理。 可能需要事先安装。 在macOS上,使用自制软件: $ brew install sdl2 其他系统/程序包管理器应提供类似sdl2 / libsdl2程序包。 然后使用...
  • Go语言编写的超快速论坛软件。 您可以通过Discord聊天与我们交谈! 最初代码库是从我一个辅助项目中派生出来,但是现在已经远远超出了。 我们已经进行了开发,并且该软件对于一般用途应该有些稳定。 功能...
  • Go语言编写的简约SMTP服务器,用于接收大量邮件。 什么是Goerrilla SMTPd? 这是用Go语言编写的小型SMTP服务器,用于接收大量电子邮件。 为GuerrillaMail.com编写,该服务器每小时处理数以万计电子邮件。 该...
  • 初学GO不到两周,本着熟悉语言目标

    初学GO不到两周,本着熟悉语言的目标写了这个小程序,漏洞很多,实现上写的也有些渣渣,欢迎大家阅读指点。


    下载地址:https://github.com/yinxin630/gochat


    简单思路描述:

    0、服务端监听客户端请求,完成会话转发的任务

    1、服务端采用心跳包维护用户在线状态

    2、客户端通知服务端自己的监听地址,创建服务端-客户端信息通道


    服务端:

    package main
    
    import (
    	"fmt"
    	"net"
    	"os"
    	"strconv"
    	"time"
    )
    //用户信息
    type User struct {
    	 userName string
    	 userAddr *net.UDPAddr
    	 userListenConn *net.UDPConn
    	 chatToConn *net.UDPConn
    }
    
    //服务器监听端口
    const LISTENPORT = 1616
    //缓冲区
    const BUFFSIZE = 1024
    var buff = make([]byte, BUFFSIZE)
    //在线用户
    var onlineUser = make([]User, 0)
    //在线状态判断缓冲区
    var onlineCheckAddr = make([]*net.UDPAddr, 0)
    
    //错误处理
    func HandleError(err error) {
    	if err != nil {
    		fmt.Println(err.Error())
    		os.Exit(2)
    	}
    }
    //消息处理
    func HandleMessage(udpListener *net.UDPConn) {
    	n, addr, err := udpListener.ReadFromUDP(buff)
    	HandleError(err)
    
    	if n > 0 {
    		msg := AnalyzeMessage(buff, n)
    		
    		switch msg[0] {
    			//连接信息
    			case "connect  ":
    				//获取昵称+端口
    				userName := msg[1]
    				userListenPort := msg[2]
    				//获取用户ip
    				ip := AnalyzeMessage([]byte(addr.String()), len(addr.String()))
    				//显示登录信息
    				fmt.Println(" 昵称:", userName, " 地址:", ip[0], " 用户监听端口:", userListenPort, " 登录成功!")
    				//创建对用户的连接,用于消息转发
    				userAddr, err := net.ResolveUDPAddr("udp4", ip[0] + ":" + userListenPort)
    				HandleError(err)
    				
    				userConn, err := net.DialUDP("udp4", nil, userAddr)
    				HandleError(err)
    				
    				//因为连接要持续使用,不能在这里关闭连接
    				//defer userConn.Close()
    				//添加到在线用户
    				onlineUser = append(onlineUser, User{userName, addr, userConn, nil})
    				
    			case "online   ":
    				//收到心跳包
    				onlineCheckAddr = append(onlineCheckAddr, addr)
    				
    			case "outline  ":
    				//退出消息,未实现
    			case "chat     ":
    				//会话请求
    				//寻找请求对象
    				index := -1
    				for i := 0; i < len(onlineUser); i++ {
    					if onlineUser[i].userName == msg[1] {
    						index = i
    					}
    				}
    				//将所请求对象的连接添加到请求者中
    				if index != -1 {
    					nowUser, _ := FindUser(addr)
    					onlineUser[nowUser].chatToConn = onlineUser[index].userListenConn
    				}
    			case "get      ":
    				//向请求者返回在线用户信息
    				index, _ := FindUser(addr)
    				onlineUser[index].userListenConn.Write([]byte("当前共有" + strconv.Itoa(len(onlineUser)) + "位用户在线"))
    				for i, v := range onlineUser {
    					onlineUser[index].userListenConn.Write([]byte("" + strconv.Itoa(i + 1) + ":" + v.userName))
    				}
    			default:
    				//消息转发
    				//获取当前用户
    				index, _ := FindUser(addr)
    				//获取时间
    				nowTime := time.Now()
    				nowHour := strconv.Itoa(nowTime.Hour())
    				nowMinute := strconv.Itoa(nowTime.Minute())
    				nowSecond := strconv.Itoa(nowTime.Second())
    				//请求会话对象是否存在
    				if onlineUser[index].chatToConn == nil {
    					onlineUser[index].userListenConn.Write([]byte("对方不在线"))
    				} else {
    					onlineUser[index].chatToConn.Write([]byte(onlineUser[index].userName + " " + nowHour + ":" + nowMinute + ":" + nowSecond + "\n" + msg[0]))
    				}
    				
    		}
    	}
    }
    //消息解析,[]byte -> []string
    func AnalyzeMessage(buff []byte, len int) ([]string) {
    	analMsg := make([]string, 0)
    	strNow := ""
    	for i := 0; i < len; i++ {
    		if string(buff[i:i + 1]) == ":" {
    			analMsg = append(analMsg, strNow)
    			strNow = ""
    		} else {
    			strNow += string(buff[i:i + 1])
    		}
    	}
    	analMsg = append(analMsg, strNow)
    	return analMsg
    }
    //寻找用户,返回(位置,是否存在)
    func FindUser(addr *net.UDPAddr) (int, bool) {
    	alreadyhave := false
    	index := -1
    	for i := 0; i < len(onlineUser); i++ {
    		
    		if onlineUser[i].userAddr.String() == addr.String() {
    			alreadyhave = true
    			index = i
    			break
    		}
    	}
    	return index, alreadyhave
    }
    //处理用户在线信息(暂时仅作删除用户使用)
    func HandleOnlineMessage(addr *net.UDPAddr, state bool) {
    	index, alreadyhave := FindUser(addr)
    	if state == false {
    		if alreadyhave {
    			onlineUser = append(onlineUser[:index], onlineUser[index + 1:len(onlineUser)]...) 
    		}
    	}
    }
    //在线判断,心跳包处理,每5s查看一次所有已在线用户状态
    func OnlineCheck() {
    	for {
    		onlineCheckAddr = make([]*net.UDPAddr, 0)
    		sleepTimer := time.NewTimer(time.Second * 5)
    		<- sleepTimer.C
    		for i := 0; i < len(onlineUser); i++ {
    			haved := false
    			FORIN:for j := 0; j < len(onlineCheckAddr); j++ {
    				if onlineUser[i].userAddr.String() == onlineCheckAddr[j].String() {
    					haved = true
    					break FORIN
    				}
    			}
    			if !haved {
    				fmt.Println(onlineUser[i].userAddr.String() + "退出!")
    				HandleOnlineMessage(onlineUser[i].userAddr, false)
    				i--
    			}
    
    		}
    	}
    }
    
    func main() {
    	//监听地址
    	udpAddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:" + strconv.Itoa(LISTENPORT))
    	HandleError(err)
    	//监听连接
    	udpListener, err := net.ListenUDP("udp4", udpAddr)
    	HandleError(err)
    
    	defer udpListener.Close()
    
    	fmt.Println("开始监听:")
    
    	//在线状态判断
    	go OnlineCheck()
    
    	for {
    		//消息处理
    		HandleMessage(udpListener)
    	}
    
    }
    

    客户端:

    package main
    
    import (
    	"fmt"
    	"os"
    	"strconv"
    	"net"
    	"bufio"
    	"math/rand"
    	"time"
    )
    
    //数据包头,标识数据内容
    var reflectString = map[string]string {
    	"连接": 		"connect  :",
    	"在线": 		"online   :",
    	"聊天": 		"chat     :",
    	"在线用户": 	"get      :",
    }
    
    //服务器端口
    const CLIENTPORT = 1616
    //数据缓冲区
    const BUFFSIZE = 1024
    var buff = make([]byte, BUFFSIZE)
    
    //错误消息处理
    func HandleError(err error) {
    	if err != nil {
    		fmt.Println(err.Error())
    		os.Exit(2)
    	}
    }
    //发送消息
    func SendMessage(udpConn *net.UDPConn) {
    	scaner := bufio.NewScanner(os.Stdin)
    
    	for scaner.Scan() {
    		if scaner.Text() == "exit" {
    			return
    		}
    		udpConn.Write([]byte(scaner.Text()))
    	}
    }
    //接收消息
    func HandleMessage(udpListener *net.UDPConn) {
    	for {
    		n, _, err := udpListener.ReadFromUDP(buff)
    		HandleError(err)
    
    		if n > 0 {
    			fmt.Println(string(buff[:n]))
    		}
    	}
    }
    /*
    func AnalyzeMessage(buff []byte, len int) ([]string) {
        analMsg := make([]string, 0)
        strNow := ""
        for i := 0; i < len; i++ {
            if string(buff[i:i + 1]) == ":" {
                analMsg = append(analMsg, strNow)
                strNow = ""
            } else {
                strNow += string(buff[i:i + 1])
            }
        }
        analMsg = append(analMsg, strNow)
        return analMsg
    }*/
    //发送心跳包
    func SendOnlineMessage(udpConn *net.UDPConn) {
    	for {
    		//每间隔1s向服务器发送一次在线信息
    		udpConn.Write([]byte(reflectString["在线"]))
    		sleepTimer := time.NewTimer(time.Second)
    		<- sleepTimer.C
    	}
    }
    
    func main() {
    	//判断命令行参数,参数应该为服务器ip
    	if len(os.Args) != 2 {
    		fmt.Println("程序命令行参数错误!")
    		os.Exit(2)
    	}
    	//获取ip
    	host := os.Args[1]
    
    	//udp地址
    	udpAddr, err := net.ResolveUDPAddr("udp4", host + ":" + strconv.Itoa(CLIENTPORT))
    	HandleError(err)
    
    	//udp连接
    	udpConn, err := net.DialUDP("udp4", nil, udpAddr)
    	HandleError(err)
    
    	//本地监听端口
    	newSeed := rand.NewSource(int64(time.Now().Second()))
    	newRand := rand.New(newSeed)
    	randPort := newRand.Intn(30000) + 10000
    
    	//本地监听udp地址
    	udpLocalAddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:" + strconv.Itoa(randPort))
    	HandleError(err)
    
    	//本地监听udp连接
    	udpListener, err := net.ListenUDP("udp4", udpLocalAddr)
    	HandleError(err)
    
    	//fmt.Println("监听", randPort, "端口")
    
    	//用户昵称
    	userName := ""
    	fmt.Printf("请输入昵称:")
    	fmt.Scanf("%s", &userName)
    	
    	//向服务器发送连接信息(昵称+本地监听端口)
    	udpConn.Write([]byte(reflectString["连接"] + userName + ":" + strconv.Itoa(randPort)))
    
    	//关闭端口
    	defer udpConn.Close()
    	defer udpListener.Close()
    
    	//发送心跳包
    	go SendOnlineMessage(udpConn)
    	//接收消息
    	go HandleMessage(udpListener)
    
    	command := ""
    	
    	for {
    		//获取命令
    		fmt.Scanf("%s", &command)
    		switch command {
    			case "chat" :
    				people := ""
    				//fmt.Printf("请输入对方昵称:")
    				fmt.Scanf("%s", &people)
    				//向服务器发送聊天对象信息
    				udpConn.Write([]byte(reflectString["聊天"] + people))
    				//进入会话
    				SendMessage(udpConn)
    				//退出会话
    				fmt.Println("退出与" + people + "的会话")
    			case "get" :
    				//请求在线情况信息
    				udpConn.Write([]byte(reflectString["在线用户"]))
    		}
    	}
    }
    


    运行环境:本地多终端模拟运行

    运行图:

    服务端:


    客户端:

    用户一:


    用户二:


    用户三:


    展开全文
  • Go编写的RTMP 1.0服务器/客户端库。 工作正在进行中 安装 go get github.com/yutopp/go-rtmp 另请参阅和 。 文献资料 笔记 如何限制比特率或设置超时 请使用 。 执照 Boost软件许可-版本1.0
  • Pholcus(幽灵蛛)是一款Go语言编写的爬虫软件框架(含GUI界面),优雅爬虫规则、可控高并发、任意批量任务、多种输出方式、大量Demo,并且考虑了支持分布式布局。 安装幽灵蛛 go get github....
  • 基于Go gorse基于协作过滤高性能Recommender系统软件包:Go Recommender系统引擎构建Build(AVX2)覆盖率文档报告gorse是基于Go编写的基于协作过滤基于SQL数据库透明推荐系统引擎。 安装go get github....
  • 使用用Go编写的Conway《人生游戏》 安装 刚去得到它: go get -u github.com/peterhellberg/life 用法 您可以使用鼠标和/或键盘切换单元格(活动/无效)。 按ENTER开始仿真或按SPACE向前一代。 键盘快捷键 钥匙 ...
  • go编写命令行工具 今天,我们有足够工具可用于在我们计算机上编辑备忘录,信件,论文,书籍,演示幻灯片和其他文档。 这既有好处也有缺点:一方面,如果您不喜欢某个软件,则可以随时随地转到另一个软件上; 另...

    go编写命令行工具

    今天,我们有足够的工具可用于在我们的计算机上编辑备忘录,信件,论文,书籍,演示幻灯片和其他文档。 这既有好处也有缺点:一方面,如果您不喜欢某个软件,则可以随时随地转到另一个软件上; 另一方面,许多这些工具,尤其是专有软件,仅与它们自己的格式完全兼容。 因此,使用该程序创建的文档越多,则无需投入大量时间,精力甚至金钱,切换到另一个解决方案的可能性就越小。 这种现象称为供应商锁定

    因此,我会尽可能使用自由软件或具有开放格式的开源软件,以便将来能够轻松找到一种工具来查看和修改它们。

    在本文中,我将探讨两种符合我的标准的解决方案,即Markdown(使用Pandoc)和Org-mode。

    使用Pandoc进行Markdown

    Markdown最初被其创建者John Gruber描述为 “用于Web作家的文本到HTML转换工具”。 如今,它可以被视为一种强调简单性的标记语言。 它允许您将丰富的文本插入到文档中,例如标题,带有重点的文本(默认情况下使用粗体和斜体字体),超链接,图像,列表,引号和代码段。 Markdown的某些版本具有其他元素:例如, GitHub Flavored Markdown还支持表,标记和编程语言的语法突出显示,任务列表,表情符号等。

    Markdown最好的部分之一是这种格式的文档存储为纯文本。 换句话说,可以使用简单的文本编辑器将其打开,该编辑器几乎可以在所有计算机和手持设备上找到。 相比之下,假设您碰巧使用的设备仅安装了简单的文本编辑器,而您正试图打开DOCX文件。 尽管可以打开它,但对我们来说却是一团乱码,因为您正在查看的是一种二进制格式,旨在供一种软件(在这种情况下为Microsoft Word)读取。

    您可以从Markdown中获得的另一个好处是,它将书写内容与设计分开。 您是否曾经因为意识到文字看起来不想要而分心,所以决定停止中间句子并调整其格式? 如果您使用诸如Markdown和Pandoc之类的WYSIWYM方法,那将永远不会再发生。 相反,您可以在源文件(这里是使用Markdown格式的纯文本文件)中记下任何想法,然后将其转换为输出格式并调整其外观,直到觉得合适为止。 如果您习惯使用WYSIWYG方法进行编程, 乍看之下似乎有些奇怪,但是从长远来看,尤其是在文档较长的情况下,您的书写体验会更加流畅,而干扰更少。

    当您用Markdown完成源文件的编写或可以预览时,在转换成其他格式时有很多选择,但是我喜欢使用Pandoc 它支持多种格式 ,包括PDF(通过LaTeX),HTML(带有CSS),EPUB,OpenDocument文本(ODT)和Office Open XML(DOCX)。 多亏了插件vim-pandoc ,它与Vim很好地集成在一起 ,但是您也可以独立于任何编辑器使用它。 (此外,即使文档完整且已导出为另一种格式,我也始终保留源文件,这样,如果我需要在另一文档中将其一部分或为之进行更新,则不必重新开始。某些原因。)

    组织模式

    另一个出色的软件是Org-mode 项目网站所述 ,它是“用于记录便笺,维护任务清单,计划项目以及使用快速有效的纯文本系统编写文档”。 就像Markdown附带转换工具一样,组织模式允许您使用自己的语法编写源文件,该语法也是人类可读的并支持RTF,并将其导出为其他输出格式,例如PDF(通过LaTeX) ,HTML(带有CSS)和OpenDocument文本。

    由于Org-mode是GNU Emacs的一部分,因此您肯定需要安装Emacs才能进行转换。 但是,由于其源文件是纯文本,因此可以使用任何编辑器打开它。 如果您根本不想触摸Emacs(除了需要设置一次),可以找到诸如vim-orgmode之类的前端,它使您可以使用Vim内部Org-mode的最常见功能。

    到底

    带有Pandoc的Markdown和组织模式都使编写文档变得更加容易。 两者都提供了从纯文本文件开始的方法,该文件可以用基本上任何编辑器打开,它们将内容与设计分开,使您可以专注于要写下来的想法,并且它们支持转换为多种格式,大多数其中是开放格式。 这样,您就不必再坚持一种单一格式,该格式要求您使用一个特定的应用程序来满足自己的需求。

    您是否将Markdown与Pandoc或Org模式一起使用? 如果是这样,您最喜欢他们什么? 您是否使用其他开源替代品? 在评论中分享它们。

    翻译自: https://opensource.com/article/17/3/document-conversion-tools-writers

    go编写命令行工具

    展开全文
  • zendea是一个使用Go语言开发开源社区系统,采用前后端分离技术,Go语言提供api进行数据支撑,用户界面使用Nuxt.js进行渲染,后台界面基于element-ui。 功能特性 快速、简单 界面美观、渐进响应式布局 基于OAuth...
  • Go语言编写的omdbapi.com客户端 omdb api文档。 安装 自己安装为: $ go get github.com/johnnycube/go-omdbapi-client (可选)要运行单元测试: $ cd $GOPATH/src/github.com/pioz/tvdb $ TVDB_APIKEY=your_...
  • Cherry是用Go编写的OpenFlow控制器,支持OpenFlow 1.0和1.3协议。 该项目不是为一般目的而设计,而是针对IT服务提供商SDN(软件定义网络)。 产品特点 支持OpenFlow 1.0和1.3协议 专注于与支持OpenFlow商用...
  • Goloop是一种用Go语言编写的具有智能合约功能企业级区块链软件,具有许多独特功能,可提供安全,不变且可扩展环境来开发去中心化应用程序。 该github存储库包含Goloop软件的源代码,它将用作企业区块链基本...
  • novm是用Go语言编写的无遗留类型2虚拟机管理程序。 其目标是为云工作负载提供备用的高性能Linux虚拟机管理程序。 novm是唯一的,因为它将文件系统设备公开为运行来宾的主要机制。 这使您可以轻松地独立管理独立...
  • 用纯Go编写的格式化/转换工具 集成模组经理 :Gophercraft目前正在开发中,并且非常不稳定:可能会发生崩溃,错误,普遍缺乏功能以及API经常更改情况。 :warning: 警告:Gophercraft目前容易
  • 该项目是用Java编写的棋盘游戏“ Go实现。 它显示了软件工程几个概念。 分层架构 观察者模式 组件和接口 为什么 该项目是在德国康斯坦茨应用科学大学软件工程”讲座背景下构建。 #Documentation...
  • 它使用作为核心代理实现,并且该接口使用Go的实现。 免责声明:这仍然是Alpha版软件,请耐心等待。 产品特点 Broxy目前是一个进行中的项目。 当前版本提供以下功能: 拦截器 过滤器的历史记录 直放站 持续性会议 ...
  • Go语言编写的PL / 0编译器 生成Windows可执行文件PL / 0编译器。 纯Go解析,无需解析器生成器。 不需要第三方软件,如汇编器或链接器。 非常小而简单,仅需约700行代码。 递归下降解析器 X86代码生成器 Win32 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 735
精华内容 294
关键字:

编写go的软件