<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语言(五)项目搭建的更多相关文章

  1. springboot基础项目搭建(十五篇)

    springboot系列一.springboot产生背景及介绍 springboot系列二.springboot项目搭建 springboot系列三.springboot 单元测试.配置访问路径.多个 ...

  2. windows下的go语言的环境搭建和初探

    闲话不说,直入主题. 1.准备工具 a.windows下的Go语言开发安装包 官方下载地址:https://code.google.com/p/go/downloads/list b.Go语言中文官网 ...

  3. vue2.0版cnode社区项目搭建及实战开发

    _________________________________________________________________________ 初涉vue就深深的被vue强大的功能,快速的开发能力 ...

  4. 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API

    前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...

  5. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建

    前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...

  6. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  7. IDEA SpringBoot多模块项目搭建详细过程(转)

    文章转自https://blog.csdn.net/zcf980/article/details/83040029 项目源码: 链接: https://pan.baidu.com/s/1Gp9cY1Q ...

  8. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  9. maven项目搭建步骤

    maven项目搭建步骤 班级:软件151           姓名:黄于霞 一.准备以下压缩包 1.JDK1.7 文件:jdk1.7.rar 2. eclipse-jee-mars-2 文件:32位系 ...

  10. SpringBoot项目搭建与打包

    一.环境准备 本地java环境jdk1.8 Maven版本3.5.2 IDE工具idea2017 二.SpringBoot微服务搭建 1.点击File >> New >> Pr ...

随机推荐

  1. 【javascript/css】关于鼠标事件onmousexxx和css伪类hover

    在运用鼠标移入移出事件时,一般有两种做法,一种是DOM事件的"onmouseover"和"onmouseout",还有一种是css的伪类":hover ...

  2. 【ExtJS】简单布局应用

    前几天学习了ExtJS的各种布局后,以下就是各种实践,从简单做起. 实现目的: 一个提交表单页,一个显示信息页,表单为个人基本资料输入,显示页为基本信息展示. 内容: 总体布局为border布局,展示 ...

  3. 机器学习——LightGBM

    基础概念 LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀.原理上它和GBDT及xgboot类似,都采用损 ...

  4. Hibernate项目环境搭建

    1.首先在eclipse里面新建一个Java工程. 2.在数据库中新建一个数据库(无需创建表,有Hibernate生成). 3.在项目中导入Hibernate所依赖的jar包,该jar包可以在此下载: ...

  5. 兼容ie6的ul水平居中对齐

    ---恢复内容开始--- margin可以为负数左移动. padding不可以. ---恢复内容结束---

  6. nodejs获取客户机ip

    /** * Created by chaozhou on 2015/11/24. */ var getIp = function(req){ var ipStr = req.headers['x-fo ...

  7. [Erlang]各种系统限制总结

    Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制. 1.进程数量 缺省情况下同时存在的最大Erlang进程数量不超过2^18=26214 ...

  8. MyBatis 学习(一)

    一.MyBatis 1.MyBatis 介绍(百度) MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数 ...

  9. EasyUI datebox 日期范围 日期关联

    jQuery EasyUI 1.4.5 html: <label>提交日期:</label> <input id="startDate" name=& ...

  10. Nginx 502错误总结

    http请求流程:一般情况下,提交动态请求的时候,nginx会直接把 请求转交给php-fpm,而php-fpm再分配php-cgi进程来处理相关的请求,之后再依次返回,最后由nginx把结果反馈给客 ...