Go语言中文网 为您找到相关结果 238

Let's go to play (模拟)

Let's go to play Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 771 Accepted Submission(s) : 213 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Mr.Lin would like to hold a party and invite his friends to this party. He has n friends and each of them can come in a sp...阅读全文

博文 2016-04-02 17:00:05 yanghui07216

go-map

package main import "fmt" /** 声明 var m map[int]string var b a := 赋值 map[int]string{} map[int]string{1: "a", 2: "b", 4: "c"} make(map[int]string) */ func main() { var m map[int]string m = map[int]string{} fmt.Println(m) var n map[int]string n = make(map[int]string) fmt.Println(n) var b = make(map[int]string) fmt.Println(b) a := make(map[int]string) ...阅读全文

博文 2016-08-14 12:00:00 u013210620

go 链表反

链表操作是数据结构中基本的操作,下面用golang实现一下链表的基本操作,包括增、删、查以及单链表的反转操作。package linkimport ( "fmt" "github.com/pkg/errors")//链表结构type ListNode struct { data int next *ListNode}//初始化链表头,下面的所有操作都是基于带头链表func NewListNode() *ListNode { return &ListNode{next: nil}}//获取链表的长度func (l *ListNode)Length() int { len :=0 for l.next != nil { len++ l = l.next } return len}//插入节点fu...阅读全文

博文 2018-10-15 12:34:41 GoSnail

Golang字符串遍历

Golang字符串遍历 package main import ( "fmt" ) func main() { v4 :=' 床前明月光, 疑似地上霜. 举着望明月, 低头思故乡. ` v6 := []rune(v4) v7 := "故" for k, v := range v6 { if string(v) == v7{ fmt.Printf("找到字符---\"%s\",\n其索引为%d\n",v7,k) fmt.Printf("%d--%c--%T\n", k, v, v) } } } 将字符串先转换为[]rune即[]int32,然后再一个个遍历, 这样才能得到一个顺序索引对应一个字符,不会隔2个才到一个中文字符,因为中文三个编码对应一个字符,直接使用for k,v := range...阅读全文

博文 2020-03-23 14:35:45 stardust_0000

golang走起(三)list简单使用和interface{}

golang走起(三)list简单使用和interface{} 代码如下: package main import ( "container/list" "fmt" ) type Person struct { age int } func main() { l := list.New() for i := 0; i < 5; i++ { p := Person{age: i * 10} l.PushBack(p) } for i := 5; i < 10; i++ { l.PushBack(i) } i := 0 // 遍历 for v := l.Front(); v != nil; v = v.Next() { if i > 4 { c := v.Value.(int) fmt.Prin...阅读全文

博文 2016-04-18 18:00:05 zjp114695092

golang遍历某个目录下的文件,并读取文件名到一个csv文件

package main import ( "encoding/csv" "fmt" "os" "path/filepath" "container/list" ) var outputFileName string = "filesName.csv" func CheckErr(err error) { if nil != err { panic(err) } } func GetFullPath(path string) string { absolutePath, _ := filepath.Abs(path) return absolutePath } func PrintFilesName(path string) { fullPath := GetFullPath(path) l...阅读全文

博文 2015-06-18 17:05:37 rufidmx

leetcode记录贴(go语言)

没事的时候打算开始玩一玩leetcode,不然天天写代码,却对算法没啥认识还是有点尴尬的。虽说是做题,其实大部分就是为了看看别人牛逼的思路。尽量每天一题把~ 1.两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 第一种方法就是便利数组,随着数组长度增加,执行时间指数型增加。 #时间复杂度:O(n^2) #空间复杂度:O(1) func twoSum(nums []int, target int) []int { for firstIndex...阅读全文

博文 2018-09-13 10:35:16 li690347460

内部排序算法(Golang版本)

package main import ( "fmt" ) func main() { //保存需要排序的Slice arr := []int{9, 3, 4, 7, 2, 1, 0, 11, 12, 11, 13, 4, 7, 2, 1, 0, 11, 12, 11} //实际用于排序的Slice list := make([]int, len(arr)) copy(list, arr) BubbleSortX(list) fmt.Println("冒泡排序:\t", list) copy(list, arr) QuickSort(list, 0, len(arr)-1) fmt.Println("快速排序:\t", list) copy(list, arr) //将arr的数据覆盖到li...阅读全文

博文 2015-11-23 03:00:00 achst

NoSQL数据库gkvdb

Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能Key-Value嵌入式数据库。 ## 特点 1. 基于纯Go语言实现,具有优异的跨平台性; 1. 数据库文件采用DRH算法设计,提升对随机数据的操作性能; 1. 良好的IO复用设计,提升对底层数据库文件的操作性能; 1. 良好的高可用设计,保证在任何异常情况下数据的完整性; 1. 提供的基本操作接口:Set()、Get()、Remove(); 1. 提供的事务操作接口:Begin()、Commit()、Rollback(); 1. 提供的多表操作接口:Table()、SetTo()、GetFrom()、RemoveFrom(); 1. 支持原子操作、批量操作、事务操作、多表操作、多表事务、随机...阅读全文

开源项目 2017-11-23 07:07:16 john

golang二叉树前序,中序,后序非递归遍历算法

package main import ( "container/list" "fmt" ) // Binary Tree type BinaryTree struct { Data interface{} Left *BinaryTree Right *BinaryTree } // Constructor func NewBinaryTree(data interface{}) *BinaryTree { return &BinaryTree{Data: data} } // 先序遍历-非递归 func (bt *BinaryTree) PreOrderNoRecursion() []interface{} { t := bt stack := list.New() res := mak...阅读全文

博文 2018-07-02 21:35:46 暮色伊人

golang中赋值string到array

常州程序员交流QQ群:123957473 要把一个string赋值给一个array,哥哥遇到一个纠结的困难,研究一番,发现主要原因是array和slice在golang里不是一个东西,本文提供两种解决方案。 在网络编程中network packet transfer,经常要定义固定的字节长度,如下面的f1: package main import "fmt" type T1 struct { f1 [5]byte // I use fixed size here for file format or network packet format. f2 int32 } func main() { t := T1{"abcde", 3} // t:= T1{[5]byte{'a','b','c'...阅读全文

博文 2014-10-04 19:25:59 meizhenfen42

golang实现二叉搜索树

关于什么是二叉搜索树,不清楚的同学可以去看我写的这个数据结构与算法的网站 数据结构 首先我们定义需要的数据结构。注意,TreeNode的左右节点都是*TreeNode type的,而树只有一个Root数据域,为*TreeNode type type TreeNode struct { Value int Left *TreeNode Right *TreeNode } type BinarySearchTree struct { Root *TreeNode } Insert 向二叉搜索树中插入元素,首先要找到插入的位置,然后再插入。这里注意我们的实现方法为给TreeNode和BinarySearchTree这两个type添加方法。需要注意给type添加方法的方式,同时还要注意,如果你要改变...阅读全文

博文 2017-03-05 11:47:47 bigtom

go语言string遍历细节

/** * Created by Administrator on 13-12-18. */ package main import ( "fmt" "os" ) func main() { str := "hello, 世界" n := len(str) for i := 0; i < n; i++ { fmt.Fprintf(os.Stdout, "%d %v %c\n", i, str[i], str[i]) } fmt.Fprintf(os.Stdout, "---------------\n") for i , v := range str { fmt.Fprintf(os.Stdout, "%d %v %c\n", i, v, v) } fmt.Fprintf(os.Stdout...阅读全文

博文 2015-06-17 23:02:37 eclipser1987

golang笔记——map

ages := make(map[string]int) // mapping from strings to ints 我们也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value: ages := map[string]int{ "alice": 31, "charlie": 34, } 这相当于 ages := make(map[string]int) ages["alice"] = 31 ages["charlie"] = 34 使用内置的delete函数可以删除元素: delete(ages, "alice") // remove element ages["alice"] Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。在实践中,...阅读全文

博文 2016-03-27 15:00:01 tianyajuanke

Golang在使用range遍历map时的key随机化问题及解决方法

Golang在使用range遍历map时的key随机化问题及解决方法 说到这个问题还真是奇葩,也有很多人遇到了 https://blog.csdn.net/slvher/... 比如下面这个哥们就遇到了,也提出了很好的解决意见,因为最近我在用Golang搭建自己的博客,在数据库查询的时候,也遇到了,只是偶尔会遇到这个问题,结果改完也彻底结局了头痛多天的思路 思路其实很简单 第一步建立一个存储key的数组 sortedKeys := make([]string, 0) 第二步将键值存入数组,并对数组进行排序 s := map[string]string{ "k1": "v1", "k2": "v2", "k3": "v3", } for k := range s { sortedKeys = ...阅读全文

博文 2018-10-25 23:34:38 DurbanZhang

GO语言按照深度遍历文件

常规方法不使用pathfilepath包 go的filepath包 go语言提供了大量的包,基于这些包我们可以完成很多有意思的事情,本节我们就来看看如何利用go语言来遍历文件。 常规方法(不使用path/filepath包) 比较直观的方式是,按照某个目录递归的方式便利文件: func walkDir(dirpath string, depth int){ if depth > DEPTH{//大于设定的深度 return } files, err := ioutil.ReadDir(dirpath)//读取目录下文件 if err != nil{ return } for _, file := range files{ if file.IsDir(){ walkDir(dirpath + ...阅读全文

博文 2016-09-20 07:00:05 sylar_d

golang操作bolt数据库

```go package main import ( "fmt" "github.com/boltdb/bolt" ) var ( db *bolt.DB bucket []byte ) const dbname = "module.db" func init() { //创建bolt数据库本地文件 dbc, err := bolt.Open(dbname, 0600, nil) //初始化bucket bucket = []byte("demoBucket") if err != nil { fmt.Println("open err:", err) return } else { db = dbc } //创建bucket db.Update(func(tx *bolt.Tx) err...阅读全文

博文 2018-09-17 15:31:27 JimPang

go map的使用

欢迎关注go语言微信公众号 每日go语言 golang_everyday go中map用于存储健值对。map格式: map[KeyType]ValueType 声明一个map,键为字符型,值为int型: m := make(map[string]int) map中添加值: m["a"] = 1 获取map中值: fmt.Println(m["a"]) 输出结果:1 获取值同时判断是否存在该值 v,exists := m["a"] fmt.Printf("%d %t",v,exists) 输出: 1 true 遍历map for key, value := range m { fmt.Println("Key:", key, "Value:", value) } 输出: Key: a Valu...阅读全文

博文 2015-05-19 03:00:11 baiyuxiong

Dig101: Go之for-range排坑指南

好久没写了,打算今年做个Dig101系列,挖一挖技术背后的故事。 > Dig101: dig more, simplified more and know more golang常用的遍历方式,有两种: for 和 for-range。 而for-range使用中有些坑常会遇到,今天我们一起来捋一捋。 文章目录 - 0x01 遍历取不到所有元素指针? - 0x02 遍历会停止么? - 0x03 对大数组这样遍历有啥问题? - 0x04 对大数组这样重置效率高么? - 0x05 对 map 遍历时删除元素能遍历到么? - 0x06 对 map 遍历时新增元素能遍历到么? - 0x07 这样遍历中起 goroutine 可以么? 可以移步 **[微信版地址](https://mp.weixin....阅读全文

博文 2020-01-05 00:14:16 NewbMiao

Golang文件及文件夹

文件夹及文件相关使用方法 // 判断文件、文件夹是否存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func Mkdir() { dir := "log" // 创建文件夹 exist, err := PathExists(dir) if err != nil { fmt.Println(err.Error()) } else { if exist { fmt.Println(dir + "文件夹已存在...阅读全文

博文 2020-03-28 15:32:46 是个懒人

golang按key值进行升序排序(ksort),对字符串进行sha1哈希

在对接PHP语言实现的签名的时候,看见对方用了ksort,由于golang里面对map的遍历是无序的,所以用golang实现了对map按key值进行升序排序: package main import ( "crypto/sha1" "encoding/hex" "fmt" "sort" "strconv" "time" ) func main() { timeStamp := time.Now().Unix() params := map[string]string{ "staff_name": "hhh", "client_id": "123", "staff_id": "114", "time": strconv.FormatInt(timeStamp, 10), "secret": "...阅读全文

博文 2019-04-01 18:34:42 Iris_Yzy

算法最短路径-Dijkstra(Golang)

//假设有9个节点,图在代码下方,可以参考 shortTablePath存放着V0到Vx某节点的最短路径 该算法,第一次先将V0的节点连接的权值存入shortTablePath,没连接的,用MAXWEIGHT表示.package main import ( "fmt" ) const MAXVEX int = 9 const MAXWEIGHT int = 1000 var shortTablePath = [MAXVEX]int{MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT} func main() { graph := NewGraph()...阅读全文

博文 2017-09-29 04:30:01 zhongxuan

go语言文件正则表达式搜索

package main import ( "fmt" "os" "path/filepath" "regexp" ) func main() { // 命令行参数 args := os.Args // 检查参数 if len(args) == 1 { fmt.Println("ff is a file find tool. use like bottom") fmt.Println("ff [dir] [regexp]") return } if len(args) < 3 { fmt.Println("args < 3") return } fileName := args[1] pattern := args[2] file, err := os.Open(fileName) if e...阅读全文

博文 2015-06-17 23:02:36 aotian16

Golang 与 zTree

package main import ( "encoding/json" "fmt" "os" "path/filepath" "sort" ) func main() { rootpath := "D:\\projects" root := FileNode{"projects", rootpath, []*FileNode{}} fileInfo, _ := os.Lstat(rootpath) walk(rootpath, fileInfo, &root) data, _ := json.Marshal(root) fmt.Printf("%s", data) } type FileNode struct { Name string `json:"name"` Path string...阅读全文

博文 2015-04-05 11:18:10 88250

golang的json处理

1、string跟[]byte的关系 string跟[]byte可以相互转换 s1 := "abcd" b1 := []byte(s1) fmt.Println(b1) // [97 98 99 100] s2 := "中文" b2 := []byte(s2) fmt.Println(b2) // [228 184 173 230 150 135], unicode,每个中文字符会由三个byte组成 2、json字符串转json var dat map[string]interface{} if err := json.Unmarshal([]byte(newstr), &dat); err == nil { fmt.Println(dat["info"]) } json字符串转json通过...阅读全文

博文 2016-11-19 14:01:03 tree2013

[leetcode in golang]121、买卖股票的最佳时机

动态规划 暴力法(多次遍历) func maxProfit(prices []int) int { maxprofit:=0 for i:=0;imaxprofit{ maxprofit=prices[j]-prices[i] } } } return maxprofit } 时间复杂度:O(n^2)循环运行[n(n−1)]/2次。 空间复杂度:O(1)。 第一次提交的错误是两个for loop的终止条件相反了……怎么想的,明明j跑在i前面 一次遍历 func maxProfit(prices []int) int { maxprofit:=0 m...阅读全文

博文 2019-09-26 01:32:43 aside section ._1OhGeD

GORM 关联查询

定义了一个 User 和 Company, User 中可以包含多个 Company, 如下: type User struct { ID int `gorm:"TYPE:int(11);NOT NULL;PRIMARY_KEY;INDEX"` Name string `gorm:"TYPE: VARCHAR(255); DEFAULT:'';INDEX"` Companies []Company `gorm:"FOREIGNKEY:UserId;ASSOCIATION_FOREIGNKEY:ID"` CreatedAt time.Time `gorm:"TYPE:DATETIME"` UpdatedAt time.Time `gorm:"TYPE:DATETIME"` DeletedAt ...阅读全文

博文 2019-04-14 14:34:38 jouyouyun

Golang(Go语言)代码技巧之字符串(string)

改变字符串中的某些字符str := "hello roc"bytes := []byte(str)bytes[1] = 'a'str = string(bytes) //str == "hallo roc"截取子串substr := str[n:m] //截取从索引n到m-1的子串遍历字符串//for遍历,此方式只能遍历存放ASCII//编码的字符串,比如中文就不行for i := 0; i < len(str); i++ {//... = str[i]}//for-range遍历,此方式可以遍历Unicode//编码的字符串,不担心乱码for index, char := range str {fmt.Printf("%d %c\n",index,char)}计算字符串长度//字符串中字符...阅读全文

博文 2017-12-27 01:41:43 zr_go

go切片

本文实例讲述了GO语言数组和切片的用法。分享给大家供大家参考。具体分析如下: 一、数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 (1)数组的创建。 数组有3种创建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() { var iarray1 [5]int32 var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5} iarray3 := [5]int32{1, 2, 3, 4, 5} iarray4 := [5]int32{6, 7,...阅读全文

博文 2016-06-29 02:00:03 zhangym

后端服务的查询语言和执行引擎GraphQuery

GraphQuery 是一门易于使用的查询语言,它内置了 Xpath/CSS/Regex/JSONpath 选择器和文本处理功能。 你可以使用简洁的 GraphQuery 语法来获取所需的任何数据结构。 使用 GraphQuery 可以统一任何后端语言的文本解析逻辑。 你不需要在不同语言之间找到 Xpath/CSS/Regex/JSONpath 选择器的实现,并熟悉它们的语法或探索它们的兼容性。 可以使用 GraphQuery 解析任何文本并使用自己熟练的选择器。GraphQuery 目前支持以下选择器: 用于解析 JSON 字符串的 Jsonpath 用于解析 XML/HTML 的 Xpath 和 CSS 用于解析任何文本的正则表达式 可以在 GraphQuery 中以任意...阅读全文

Golang通过邻接表实现有向图

本科学习数据结构的时候就听前辈说过,学好数据结构、计算机组成、操作系统和计算机网络后就会成为大神,我也使劲学过,但是一直没发现数据结构的用处。实际编程用过比较多的就是哈希表了,一般语言也都会通过一些扩展包支持。 《数学之美》第九章——《图论和网络爬虫》,就浅显易懂的介绍了图的实际用途。搜索引擎里面的网络爬虫抓取网络数据,就是把互联网抽象成有向图这种数据结构,通过遍历这张图实现的互联网抓取。 图一般分为有向图和无向图,一般用来开发网络爬虫和地图(我就知道这两个)。图可以认为是节点和连接边的集合,有两种实现方式:邻接表和邻接矩阵。稀疏图用邻接表实现,稠密图用邻接矩阵实现。图的重点在于遍历,有深度优先遍历和广度优先遍历。深度优先遍历可以通过递归实现,而广度优先遍历要转换成类似于树的层序遍历来实现。...阅读全文

博文 2017-02-09 12:25:22 Bryce

还是一个闭包的问题

需求是这样的: 我封装了一个函数,遍历csv文件,每次打印一条记录. 我想把它改一下,每次调用这个函数,得到csv中的一条记录(也是遍历). 我是这样写的: ```go func GetOneline() func() string { f, err := os.Open("Urls.csv") if err != nil { panic( err) } read := csv.NewReader(f) return func() string { record, err := read.Read() if err == io.EOF { return "" } else if err != nil { g...阅读全文

go 速学 - 08 - Map

目录 Map 创建 Map Setter 和 Getter Size 删除一个元素 Map 嵌套 检查键是否存在 遍历 摘要 创建 Map,make,setter,getter,size,delete,检查键的存在,遍历 Map 创建 Map 定义后再初始化 var m1 map[int]string m1 = map[int]string{} //m1 map[] 使用 make 函数 格式为 make([keyType]valueType, cap) 容量可以省略 var m2 map[int]string = make(map[int]string) 使用简写 m3 := make(map[int]string) Setter 和 Getter Setter m3[1] = "a" /...阅读全文

博文 2015-05-07 00:00:00 mrseasons

Golang - 文件夹遍历

文件夹遍历可以使用filepath.Walk(root string, walkFn filepath.WalkFunc) error来实现,非常方便,root可以是文件夹的绝对路径也可以是文件的绝对路径,但是通常使用文件夹,对文件来说,遍历没有意义。 新建文件traversalFolder.go // traversalFolder.go package main import ( "fmt" "os" "path/filepath" ) func walkFunc(path string, info os.FileInfo, err error) error { if info == nil { // 文件名称超过限定长度等其他问题也会导致info == nil // 如果此时retur...阅读全文

博文 2017-03-05 19:58:44 莫尛莫

继Prototype之后又一个优秀的JavaScript代码库,jQuery开发教程送你

课程介绍 jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。 它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 课程目标 • 掌握jQuery开发技术 适合人群 • 前端开发者 课时列表 • 课时1:jQuery_基础 • 课时2:jQuery_基础选择器 • 课时3:jQuery_属性选择器 • 课时4:jQuery_基础过滤...阅读全文

Go: channel meet range

package main import "fmt" func Count(ch chan int) { fmt.Println("Do Something") //do something work ch <- 1 } func main() { chs := make([]chan int, 10) /* * 这样初始channel数组才是对的 (标1) *for i := 0; i < 10; i++ { * chs[i] = make(chan int) * go Count(chs[i]) *} */ //下面这样是不行的,要deadlock的(标2) for _, ch := range chs { ch = make(chan int) go Count(ch) } //这样也是...阅读全文

博文 2015-06-18 09:09:20 bobozhengsir

go语言 类型:数组

在go语言中数组array是一组特定长度的有序的元素集合。 go的数组类型由两部分组成——类型和长度,二者缺一不可。数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定其存储元素的类型以及存储多少个元素。 在Go语言中,数组长度在定义后就不可更改。 数组是值类型,每次传递都将产生一份副本。 例子: package main import ( "fmt" "strconv" ) func main() { var a [5]int //定义数组 5个整数型 fmt.Println("emp:", a) //整数型零值为0 a[4] = 100 //修改数组 fmt.Println("set:", a) fmt.Println("get:", a[4]) //输出...阅读全文

博文 2015-10-13 03:00:00 osfipin

Go语言的插入排序实现

这个算法还是我考研的时候看懂的。插入排序大体有两种,头插法和尾插法。区别就是插入的位置是头部还是尾部。 简单说一下插入排序的思路: 从第二个元素开始遍历,第一个元素认为是有序的; 将要插入的元素依次与已有序队列比较,插入到合适的位置; 循环执行,直到遍历结束。 Golang包里的实现和我上面说的严奶奶的有点区别。将遍历得到的元素倒着与有序队列依次比较。如果比有序队列的小,交换这两个元素。 这样的方法和传统的相比,插入步骤同样都是通过从后向前依次移动实现的插入。而这个方法更加简单一点,不需要声明临时变量。 package main import "fmt" func insertionSort(data Interface, a, b int) { for i := a + 1; i < b;...阅读全文

博文 2017-02-09 12:25:17 Bryce

Golang比较两个slice是否相等

比较两个slice包含的元素是否完全相等的情况: reflect.DeepEqual 循环遍历 通常reflect的方法性能都比较低,在此使用Benchmark测试两种方法的性能,以明确具体性能差异。 两种方式的实现 新建文件: path/test/compare.go package test import "reflect" // ReflectDeepEqual 直接使用 reflect 包的 reflect.DeepEqual 方法进行比较 func ReflectDeepEqual(a, b []int) bool { return reflect.DeepEqual(a, b) } // LoopCompare 循环遍历比较 // 先比较两个数的长度是否相等 // 再循环遍历每一...阅读全文

博文 2020-04-14 13:32:43 Avery_up

排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序

算法是程序的灵魂,而排序算法则是一种最基本的算法。排序算法有许多种,本文介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例。 一、冒泡排序 冒泡排序的原理是,对给定的数组进行多次遍历,每次均比较相邻的两个数,如果前一个比后一个大,则交换这两个数。经过第一次遍历之后,最大的数就在最右侧了;第二次遍历之后,第二大的数就在右数第二个位置了;以此类推。 //冒泡排序(排序10000个随机整数,用时约145ms) func bubbleSort(nums []int) { for i := 0; i < len(nums); i++ { for j := 1; j < len(nums)-i; j++ { if nums[j] < nums[j-1] { //交换 nums[j]...阅读全文

博文 2015-06-17 23:07:39 books1958

Golang的不定参数

在很多语言中都提供了不定参数和函数重载以及函数式语言中得闭包来提高函数的灵活性。如果使用过fmt包里的函数,那么你就已经接触到了Golang的不定参数了。那么如何定义一个自己的不定参数的函数呢?一、函数定义首先来看如何定义一个不定参数的函数:func YourFun(v... interface{}){ }该函数定义,定义了一个接受任何数目任何类型参数的函数。这里特殊的语法是三个点“...”,在一个变量后面加上三个点后,表示从该处开始接受不定参数,不同于python,golang的不定参数如果将这里"interface{}" 替换成某一确定类型,那么其就只能接受该类型的不定参数。二、三个点上面我们看到有三个点"..."的特殊标记。那么这三个点"..."有啥作用呢?2.1 不定参数如上所述,在...阅读全文

博文 2017-02-09 17:23:10 gotaly

go 速学 - 07 - Slice

目录 切片 Slice 概念 创建 Slice 定义切片 指定范围创建切片 使用 make 创建切片 len和 cap 遍历 Reslice Append 概念 使用 Copy 摘要 切片和数组的区别,创建切片,指定范围,make,遍历,reslice,append,copy 切片 Slice 概念 切片本身不是数组,而是指向底层的数组,关联数组的局部或全部 切片是引用类型 创建切片时索引不能超过数组的大小,否则会报异常 创建 Slice 定义切片 定义时不用指定长度(指定长度或使用 “…” 表示的是数组) //切片 var s []int fmt.Println(s) //[] //数组 var arr [5]int fmt.Println(arr) //[0 0 0 0 0] 指定范围创...阅读全文

博文 2015-05-06 23:00:15 mrseasons

golang 遍历时元素指针问题

问题 golang 执行for 遍历时取value的指针时容易出错 代码实现 package main import ( "log" "time" ) type student struct { Name string Age int } func main() { m := make([]*student, 3) stus := []student{ student{Name: "sa", Age: 10}, student{Name: "sb", Age: 11}, student{Name: "sc", Age: 12}, } log.Println("################ 错误做法 ##################") for k, stu := range stus...阅读全文

博文 2018-12-12 14:34:47 火头陀

GO语言数组和切片实例详解

一、数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 (1)数组的创建。 数组有3种创建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() { var iarray1 [5]int32 var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5} iarray3 := [5]int32{1, 2, 3, 4, 5} iarray4 := [5]int32{6, 7, 8, 9, 10} iarray5 := [...]int32{11, 12...阅读全文

博文 2016-10-03 03:00:01 tree2013