Golang
Life is short and let's go!
平头哥阿威
coding....
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Go语言自己实现Itoa和Atoi,字符转数字,数字转字符
Itoa不适用任何库,纯代码实现func itoa(i int) (ret string) { neg := false if i < 0 { i = -i neg = true } else if i == 0 { return "0" } var cs []string for i > 0 { cs = append(cs, string(i%10+'0')) i /= 10 } for i, j := 0, len(cs)-1; i < j;原创 2022-05-15 17:43:53 · 667 阅读 · 1 评论 -
包含min函数的栈
文章目录方法一:辅助栈list模拟栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。方法一:辅助栈要做出这道题目,首先要理解栈结构先进后出的性质。对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。因此,在操作过程中的任意一个时刻,只要栈顶的原创 2022-11-04 18:06:41 · 265 阅读 · 0 评论 -
两个栈实现一个队列
文章目录双栈用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )type CQueue struct {}func Constructor() CQueue {}func (this *CQueue) AppendTail(value int) {}func (this *CQueue) DeleteH原创 2022-11-04 18:05:28 · 368 阅读 · 0 评论 -
Go语言代码优化
string和[]byte之间的下相互转换import ( "encoding/json" "fmt" "unsafe")func string2bytes(s string) []byte { return *(*[]byte)(unsafe.Pointer(&s))}func bytes2string(b []byte) string { return *(*string)(unsafe.Pointer(&b))}type Man struct { Age原创 2022-04-29 17:08:33 · 503 阅读 · 0 评论 -
Go Modules 详解使用
文章目录创建一个新模块添加依赖项升级依赖项删除未使用的依赖项总结自从 Go 官方从去年推出 1.11 之后,增加新的依赖管理模块并且更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为模块路径和特定语义版本。从 Go 1.11 开始,Go 允许在 $GOPATH/src 外的任何目录下使用 go.mod 创建项目。在 $GOPATH/sr原创 2020-08-27 22:42:56 · 549 阅读 · 0 评论 -
Go: 谨慎使用 math/rand 包中的默认随机数函数
https://mozillazg.com/2019/05/go-be-careful-of-math-rand-functions.html转载 2020-03-25 13:07:51 · 669 阅读 · 0 评论 -
Go语言基础之并发(并发安全和锁)
文章目录互斥锁读写锁sync.Once实现单例模式sync.Map原子操作互斥锁使用互斥锁能够保证同一时间有且只有一个goroutine进入临界区,其他的goroutine则在等待锁;当互斥锁释放后,等待的goroutine才可以获取锁进入临界区,多个goroutine同时等待一个锁时,唤醒的策略是随机的。package mainimport ( "fmt" "sync")va...原创 2020-03-08 15:18:05 · 830 阅读 · 0 评论 -
Go语言基础之并发(channel通信)
文章目录channelchannel操作有缓冲通道和无缓冲通道从通道取值单向通道channel单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Commu...原创 2020-03-08 11:57:15 · 771 阅读 · 0 评论 -
Go语言基础之并发(Goroutine)
文章目录并发与并行Go语言实现并发的方式goroutine的使用goroutine之间的通信channel并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。并发与并行并发:同一时间段内执行多个任务(我边微信和女朋友聊天边玩王者荣耀。我在自己复活阶段这个短暂的时间去回复一下微信消息。并不意味着我能在同一时刻玩游戏和陪女朋友)。并行:同一时...原创 2020-03-08 09:30:00 · 902 阅读 · 1 评论 -
Golang语言基础之反射
Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。反射概念反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口...原创 2020-03-06 20:04:31 · 513 阅读 · 0 评论 -
Go语言文件操作
文章目录File方法读取文件File方法写入操作bufio读取文件bufio写入文件ioutil读取整个文件ioutil写入文件File方法读取文件文件的打开和关闭os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。读取文件file.Read()Rea...原创 2020-03-03 21:58:20 · 324 阅读 · 0 评论 -
Go语言基础之接口
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行...原创 2020-03-03 14:59:50 · 510 阅读 · 0 评论 -
Go语言基础之time包
package mainimport ( "fmt" "time")func main() { fmt.Printf("-----------------------时间类型和时间戳----------------------\n") now := time.Now() //返回值now是time.Time类型,time.Time是个时间结构体 timestamp ...原创 2020-03-03 13:14:10 · 801 阅读 · 0 评论 -
Golang关于return原理和defer的执行时机
简单介绍的deferdefer是什么?在Go语言中,可以使用关键字defer向函数注册退出调用,即主函数退出时,defer后的函数才被调用。defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码。defer的用途在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,为了在函数执行完 毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。...原创 2020-03-02 17:43:34 · 742 阅读 · 0 评论 -
Golang结构体
结构体模拟继承Golang语言没有继承概念,只能通过struct嵌套struct模拟实现package mainimport "fmt"type animal struct{ habitat0 string//栖息地 life0 int//寿命 eat0 string//生存方式}func newAnimal(habitat,eat string,life int)*ani...原创 2020-03-02 11:39:49 · 491 阅读 · 0 评论 -
Golang下标访问和range访问的区别
package mainimport "fmt"var spl = make([]int, 0, 10)func main() { a := 10 b := 20 spl = append(spl, a) for _, val := range spl { fmt.Printf("range方式修改前:%v\n",val) val = b fmt.Printf("r...原创 2020-03-02 10:46:32 · 1100 阅读 · 0 评论 -
Golang的函数和闭包
文章目录多个参数可变参数多个返回值定义函数类型函数作为参数匿名函数闭包多个参数package mainimport "fmt"func add(x, y int) (ret int) { //x的类型省略,x和相邻的y同类型,返回值指定为ret int,如果返回值仅int,则可返回任意的int数据 ret = x + y //ret直接使用,无须再定义 return /...原创 2020-03-01 10:04:00 · 364 阅读 · 0 评论
分享