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 ...
随机推荐
- 导入数据到HBase的方式选择
Choosing the Right Import Method If the data is already in an HBase table: To move the data from one ...
- git笔记(三)
详细输出日志 git log --pretty=raw 查看id类型 git cat-file -t fe4c git cat-file -t b36bf6 git cat-file -t b08 ...
- 在ubuntu10.10下安装Google谷歌拼音输入法
安装步骤如下:1.下载文件:sudo wget http://malu.googlecode.com/files/scim-googlepinyin.tar.gz(经测试,这个链接已经失效了,幸好有前 ...
- Golang教程:类型
下面是 Go 支持的基本类型: bool Numeric Types int8, int16, int32, int64, int uint8,uint16,uin32,uint64, uint f ...
- bzoj 4161: Shlw loves matrixI
Description 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 ...
- [转]ECMAScript 6 入门 -编程风格
本文转自:http://es6.ruanyifeng.com/#docs/style 编程风格 块级作用域 字符串 解构赋值 对象 数组 函数 Map结构 Class 模块 ESLint的使用 本章探 ...
- Splunk大数据分析经验分享
转自:http://www.freebuf.com/articles/database/123006.html Splunk大数据分析经验分享:从入门到夺门而逃 Porsche 2016-12-19 ...
- ios audio不能自动播放
今天做了一个简单的落地页项目,就是类似于手机微信上经常看到的滑动效果.因为公司要求需要自己开发,所以我就用swiper+swiper.animate开发,开发速度很快,只不过最后音乐哪里出现了一点小b ...
- JAVA线程池的原理分析
线程池的作用 1.降低资源的消耗 2.提高效率 3.方便管理 相关概念 corePoolSize核心线程数:核心池的大小,当有任务到达之后,就会创建一个线程去执行任务,当任务数量到达核心线程数后,就会 ...
- 初进JAVA职场面试小技巧:一个老学长的吐血之作!
看着一批批小白的遭遇,有些无奈,又跟我年轻时有些类似.今天正好有点时间,给你几个建议. 1.在结业之前一定要把自己参与过的项目仔细审视一下,一点要特别熟悉项目的流程功能,另外也要重视自己做过的模块,看 ...