<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. 游戏中的网络同步机制——Lockstep(帧同步)

    本文来自: https://bindog.github.io/blog/2015/03/10/synchronization-in-multiplayer-networked-game-lockste ...

  2. 【Linux】Linux C socket 编程之UDP

    发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...

  3. Gradient Optimization

    Gradient Optimization Gradient Descent Batch Gradient Descent Mini-Batch Gradient Descent Stochastic ...

  4. python 初级/中级/高级/核心

    "一等对象": 满足条件:1.在运行时创建 2.能赋值给变量或数据结构中的元素 3.能作为参数传递给函数 4.能作为函数的返回结果 [ 整数.字符串.字典."所有函数&q ...

  5. AtCoder Grand Contest 006 F - Blackout

    Description 在 \(n*n\) 的棋盘上给出 \(m\) 个黑点,若 \((x,y)\),\((y,z)\) 都是黑点,那么 \((z,x)\) 也会变成黑点,求最后黑点的数量 题面 So ...

  6. Eclipse 常见问题总结

    添加包 1.build path 直接添加 2.在windows-->preferences -> Java -> build path -> classpath variab ...

  7. linux免密登录ssh验证配置方法及常见错误解决

    目标:从服务器A免密登录服务器B [配置方法] 1.在服务器A生成密钥文件,直接使用以下命令: ssh-keygen 中间遇到输入内容一路回车即可,完成后会在 ~/.ssh 目录下生成两个文件:id_ ...

  8. log4js日志

    安装log4js:npm install log4js express中配置log4js中间件: var log = require("./modules/utils/logUtil.js& ...

  9. Maven+Spring+MySql 登陆实例

    近来无事,复习复习Spring相关知识,从<Spring企业应用开发实战>这本书开始. 本文为学习<Spring企业应用开发实战>总结,著作权归原作者. 一.用Maven建立w ...

  10. 一个简单的JQuery自适应分页插件twbsPagination

    下载地址:http://esimakin.github.io/twbs-pagination/ 1 解决totalPages不更新的问题 (先移除然后重新加入DOM树中)在使用twbsPaginati ...