<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. idea的插件zookeeper

    平时用惯了ZooInspector,偶然知晓了idea的这个插件,试了一下感觉挺方便的 由于开发环境在内网,所以这里介绍内网方式(外网更简单). 1.下载插件 http://plugins.jetbr ...

  2. git学习笔记5

    查看保存的进度 git stash list 恢复进度 git stash pop 测试运行哪些文件会被删除 git clean -nd 强制删除 git clean -fd 保存当前的工作进度,会保 ...

  3. 算法学习笔记之——priority queue、heapsort、symbol table、binary search trees

    Priority Queue 类似一个Queue,但是按照priority的大小顺序来出队 一般存在两种方式来实施 排序法(ordered),在元素入队时即进行排序,这样插入操作为O(N),但出队为O ...

  4. React.js 小书 Lesson20 - 更新阶段的组件生命周期

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...

  5. a 标签的跳转属性

     a 标签中调用js的几种方法   我们常用的在a标签中有点击事件:1. a href="JavaScript:js_method();" 这是我们平台上常用的方法,但是这种方法在 ...

  6. Array中对象的排序

    1.子母排序 NSArray *kArrSort = [_dic allKeys]; //这里是字母数组:,g,a,b.y,m…… NSArray *resultkArrSort = [kArrSor ...

  7. NOI 2018 酱油记

    转眼离 NOI 2018 已经过了一个星期了,退役的我还是随便来水水吧. 语法.错字之类的可能会很多,但是我也不拘这点小节了. 恭喜 yww, zjt, sk 进队,zwl, myh au , yay ...

  8. Truncated incorrect DOUBLE value: 'NO_REFUND'

    解决办法:Mysql中,如果一个字段是字符串,则一定要加单引号 问题原因: `item_refund_state` ) NOT NULL item_refund_state字段的类型是varchar但 ...

  9. 十三、nginx 强制下载txt等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件. 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/ ...

  10. SSM面试

    Spring两大核心:IOC AOP DI AOP:所谓面向切面变成,是一种通过预编译和运行期动态化代理的方式实现了再不修改源代码的情况下给程序动态添加功能的技术. Mybatis(半自动化实现obj ...