GO语言(五)项目搭建
<sorter>
|------<src>(手动添加,代码存放处)
|------sorter.go
|------<algorithm>
|--------<qsort>
|-------qsort.go
|-------qsort_test.go
|--------<bubblesort>
|-------bubblesort.go
|-------bubblesort_test.go
|------<pkg> (自动生成,保存静态编译文件)
|------<bin>(自动生成,保存可执行文件)
[注]
<>是目录,*.go是文件;
写5个文件,如下:
------------------------------------------------------------------------------------------
[qsort.go]
package qsort func quickSort(values []int, left,right int) {
temp := values[left]
p := left
i,j := left,right for i<=j {
for j >= p && values[j] >= temp {
j--
}
if j >= p {
values[p] = values[j]
p = j
} for i <= p && values[i] <= temp {
i++
}
if i <= p {
values[p] = values[i]
p = i
}
}
values[p] = temp
if p - left > {
quickSort(values, left, p-)
}
if right - p > {
quickSort(values, p+, right)
}
} func QuickSort(values []int) {
quickSort(values, , len(values)-)
}
[qsort_test.go]
package qsort import "testing" func TestQuickSort1(t *testing.T) {
values := []int{,,,,}
QuickSort(values)
if values[] != || values[] != || values[] != || values[] != || values[] != {
t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 4 5")
}
}
[bubblesort.go]
package bubblesort func BubbleSort(values []int) {
flag := true for i:=; i<len(values); i++ {
flag = true for j:=; j<len(values)-i-; j++{
if values[j] > values[j+] {
values[j],values[j+] = values[j+],values[j]
flag = false
}
} if(flag == true) {
break
}
}
}
[bubblesort_test.go]
package bubblesort import "testing" func TestBubbleSort1(t *testing.T) {
values := []int{,,,,}
BubbleSort(values)
if values[]!= || values[]!= || values[]!= || values[]!= || values[]!= {
t.Error("BubbleSort() failed.Got", values, "Expected 1 2 3 4 5.")
}
}
[sorter.go]
package main import (
"fmt"
"flag"
"bufio"
"io"
"os"
"strconv"
"time"
"sorter/algorithm/qsort"
"sorter/algorithm/bubblesort"
) var infile *string = flag.String("i", "unsorted.dat", "File contains values for sorting")
var outfile *string = flag.String("o", "sorted.dat", "File to receive sorted values")
var algorithm *string = flag.String("a", "qsort", "Sort algorithm") func readValues(infile string)(values []int, err error) {
file, err := os.Open(infile)
if err != nil {
fmt.Println("Failed to open the input file ", infile)
return
} defer file.Close() br := bufio.NewReader(file)
values = make([]int, ) for {
line, isPrefix, errl := br.ReadLine() if errl != nil {
if errl != io.EOF {
err = errl
}
break
} if isPrefix {
fmt.Println("A too long line, seems unexpected.")
return
} str := string(line)
value, errl := strconv.Atoi(str)
if errl != nil {
err = errl
return
}
values = append(values, value)
}
return
} func writeValues(values []int, outfile string) error {
file, err := os.Create(outfile)
if err != nil {
fmt.Println("Failed to create the output file ", outfile)
return err
} defer file.Close() for _,value := range values {
str := strconv.Itoa(value)
file.WriteString(str + "\n")
}
return nil
} func main() {
flag.Parse()
if infile != nil {
fmt.Println("infile=", *infile, "outfile=", *outfile, "algorithm=", *algorithm)
} values, err := readValues(*infile)
if err == nil {
fmt.Println("Read values: ", values)
t1 := time.Now()
switch *algorithm {
case "qsort" :
qsort.QuickSort(values)
case "bubblesort":
bubblesort.BubbleSort(values)
default:
fmt.Println("Sorting algorithm", *algorithm, "is either unknown or unsupported.")
}
t2 := time.Now() fmt.Println("The sorting process costs", t2.Sub(t1), "to cpmplete") writeValues(values, *outfile)
}else {
fmt.Println(err)
}
}
之后,返回到sorter目录节点,依次执行如下命令:(GOPATH:必须加入sorter的目录)
go build sorter/algorithm/qsort
go build sorter/algorithm/bubblesort
go test sorter/algorithm/qsort
go test sorter/algorithm/bubblesort
go install sorter/algorithm/qsort
go install sorter/algorithm/bubblesort
go build sorter
go install sorter
;bin目录下会有sorter的可执行文件生成;
----------------------------------------------------------------------------------------
bin目录下放入一个unsorted.bat文件,文件内容为
23
10
234
89
190
;执行命令:./sorter,会生成一个sorted.bat文件,内容为:
10
23
89
190
234
[完结]
GO语言(五)项目搭建的更多相关文章
- springboot基础项目搭建(十五篇)
springboot系列一.springboot产生背景及介绍 springboot系列二.springboot项目搭建 springboot系列三.springboot 单元测试.配置访问路径.多个 ...
- windows下的go语言的环境搭建和初探
闲话不说,直入主题. 1.准备工具 a.windows下的Go语言开发安装包 官方下载地址:https://code.google.com/p/go/downloads/list b.Go语言中文官网 ...
- vue2.0版cnode社区项目搭建及实战开发
_________________________________________________________________________ 初涉vue就深深的被vue强大的功能,快速的开发能力 ...
- 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API
前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建
前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途
Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...
- IDEA SpringBoot多模块项目搭建详细过程(转)
文章转自https://blog.csdn.net/zcf980/article/details/83040029 项目源码: 链接: https://pan.baidu.com/s/1Gp9cY1Q ...
- React项目搭建与部署
React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...
- maven项目搭建步骤
maven项目搭建步骤 班级:软件151 姓名:黄于霞 一.准备以下压缩包 1.JDK1.7 文件:jdk1.7.rar 2. eclipse-jee-mars-2 文件:32位系 ...
- SpringBoot项目搭建与打包
一.环境准备 本地java环境jdk1.8 Maven版本3.5.2 IDE工具idea2017 二.SpringBoot微服务搭建 1.点击File >> New >> Pr ...
随机推荐
- 【javascript/css】关于鼠标事件onmousexxx和css伪类hover
在运用鼠标移入移出事件时,一般有两种做法,一种是DOM事件的"onmouseover"和"onmouseout",还有一种是css的伪类":hover ...
- 【ExtJS】简单布局应用
前几天学习了ExtJS的各种布局后,以下就是各种实践,从简单做起. 实现目的: 一个提交表单页,一个显示信息页,表单为个人基本资料输入,显示页为基本信息展示. 内容: 总体布局为border布局,展示 ...
- 机器学习——LightGBM
基础概念 LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀.原理上它和GBDT及xgboot类似,都采用损 ...
- Hibernate项目环境搭建
1.首先在eclipse里面新建一个Java工程. 2.在数据库中新建一个数据库(无需创建表,有Hibernate生成). 3.在项目中导入Hibernate所依赖的jar包,该jar包可以在此下载: ...
- 兼容ie6的ul水平居中对齐
---恢复内容开始--- margin可以为负数左移动. padding不可以. ---恢复内容结束---
- nodejs获取客户机ip
/** * Created by chaozhou on 2015/11/24. */ var getIp = function(req){ var ipStr = req.headers['x-fo ...
- [Erlang]各种系统限制总结
Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制. 1.进程数量 缺省情况下同时存在的最大Erlang进程数量不超过2^18=26214 ...
- MyBatis 学习(一)
一.MyBatis 1.MyBatis 介绍(百度) MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数 ...
- EasyUI datebox 日期范围 日期关联
jQuery EasyUI 1.4.5 html: <label>提交日期:</label> <input id="startDate" name=& ...
- Nginx 502错误总结
http请求流程:一般情况下,提交动态请求的时候,nginx会直接把 请求转交给php-fpm,而php-fpm再分配php-cgi进程来处理相关的请求,之后再依次返回,最后由nginx把结果反馈给客 ...