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

用 Go 写了个类似 Rails ActiveRecord 的 ORM 库, gorm

目前支持的功能有 * CURD * Chainable API * Before/After Create/Save/Update/Delete Callbacks * Order/Select/Limit/Offset Support * Update, Updates Like Rails's update_attribute, update_attributes * Dynamically set table name when search, update, delete... * Automatically CreatedAt, UpdatedAt * Soft Delete * Create table from struct * Prevent SQL ...阅读全文

主题 2013-10-29 06:01:59 jinzhu

golang按行写文件

将map[string]string写入文件 func WriteMaptoFile(m map[string]string, filePath string) error { f, err := os.Create(filePath) if err != nil { fmt.Printf("create map file error: %v\n", err) return err } defer f.Close() w := bufio.NewWriter(f) for k, v := range m { lineStr := fmt.Sprintf("%s^%s", k, v) fmt.Fprintln(w, lineStr) } return w.Flush() ...阅读全文

博文 2016-03-14 17:00:01 xielingyun

switch _ golang

switch 1: 在条件语句中,可以写多条的语句 2: 也可以不添加语句 package main import ( "fmt" "time" ) func main() { i := 2 fmt.Println("write ", i, " as ") switch i { case 1: fmt.Println("one") case 2: fmt.Println("two") case 3: fmt.Println("three") } switch time.Now().Weekday() { case time.Saturday, time.Sunday: fmt.Println("it's the weekend") default: fmt.Println("it's a w...阅读全文

博文 2015-03-13 03:00:01 jackkiexu

go语言三——并行

go从语言层面就支持并行程序设计goroutine(Go语言并行设计的核心),比thread高效易用 package main import( "fmt" "runtime" ) func say(word string){ for i:=0; i<10; i++ { // runtime.Gosched() //让出时间片 fmt.Println(word) } } func main(){ //默认系统线程数量为1,可通过下面指令调整,充分利用多核优势 runtime.GOMAXPROCS(4) go say("Hello") say("World") } 多个 goroutine 运行在同一个进程里面,共享内存数据,不过设计上我们要遵循:不要通过共享来通信,而要通过通信来共享go提供了...阅读全文

博文 2014-10-04 19:26:22 ciaos

Golang版的CRC16校验(查表法)

用go仿写了一个CRC16校验方法 var ( aucCRCHi = []byte{ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0...阅读全文

博文 2017-12-14 08:06:00 iuoui

以io.Writer为例看go中的interface{}

阅读该文后的一些理解 1 io.Writer接口 io.Writer接口有如下定义 package io type Writer interface { Write(p []byte) (n int, err error) } //根据go中接口的特点,所有实现了Write方法的类型,我们都说它实现了io.Writer接口。 2 somepkg.abc类型实现了io.Writer接口 package somepkg type Abc struct { id int } func (a *Abc) Write(p []byte) (n int, err error){ //writing.... return 1,nil //模拟返回,n表示写了几个字节,err表示是否有错误 } //根据go...阅读全文

博文 2014-10-04 19:26:27 waynehu

golang 写文件

package main import ( "bufio" "fmt" "io" "os" ) func main() { fil, err := os.OpenFile("C:/Documents and Settings/xxx/Desktop/tax.txt", os.O_RDWR|os.O_APPEND, 0420) if err != nil { fmt.Printf("Error: %s\n", err) return } defer fil.Close() fil.WriteString("Hello World!\n") } ===============io WriteString================== package main import ( "fmt" ...阅读全文

博文 2015-04-07 03:00:05 rojas

golang 写二叉查找树练习

package main import ( "fmt" ) type item struct { key int } type tree struct { lchild, rchild *tree item item count int } func compare(x, y item) int { var ret int switch { case x.key > y.key: ret = 1 case x.key == y.key: ret = 0 case x.key < y.key: ret = -1 } return ret } func create(T *tree, x item) *tree { if T == nil { T = new(tree) T.item = x T...阅读全文

博文 2015-06-21 00:01:19 u014798316

golang--gopher北京大会

大会感想:牛人真的很能写代码,实现很多功能,而且开源的精品越多,影响力越大,换工作跟玩似的,越能过上dream life。比如beego的作者,去了America,进入了Apple。另外,创业公司的精英们特点是表达能力很强,也能撕逼。比如Golang和Rust性能pk就争论得不可开交。参与这种技术社群真的是让人脑洞大开,记得谁说过那么一句话--不让你感到惊喜的语言不值得学。我想表达的是不让我感到惊喜的会议不值得花钱参加。 我很想分享一些干货,后续我会通过图片展示出来,目前我只想说,本来很有激情,但是说给老婆听后,就很沮丧了。老婆那句话说的好,golang再容易上手,我估计这辈子是没希望能站到讲台上和大牛那样撕逼了。虽然这几年和老婆吵架,撕逼技术已经渐长。但距离高手的路还是很长。起码githu...阅读全文

博文 2016-04-17 09:00:01 zzuse

golang写一个简单的爬虫

package main import( "fmt" "io/ioutil" "net/http" ) func gethtml(url string) (r *http.Response, e error){ resp,err := http.Get(url) if err != nil { fmt.Print("error") } return resp,err } func main(){ resp, _ :=gethtml("http://www.baidu.com") defer resp.Body.Close() fmt.Println(resp.StatusCode) if resp.StatusCode==http.StatusOK{ body,err :=ioutil.Re...阅读全文

博文 2018-06-07 15:30:01 c-x-a

分享:用四十种语言分别写一个MD5算法 之12 Go语言MD5算法

分享:用四十种语言分别写一个MD5算法 之12 Go语言MD5算法 package main import ( "crypto/md5" "fmt" ) func main() { for _, p := range [][2]string{ } { validate(p[0], p[1]) } } var h = md5.New() func validate(check, s string) { h.Reset() h.Write([]byte(s)) sum := fmt.Sprintf("%x", h.Sum()) if sum != check { fmt.Println("MD5 fail") fmt.Println(" for string,", s) fmt.Println(...阅读全文

博文 2015-06-17 23:01:48 sooch

云数据库HBase版重磅商业化上线

摘要: 云数据库HBase版经过4个月的公测,正式商业化上线了,本文介绍了云数据库HBase的前世今生(结尾有彩蛋)。   随着近些年互联网行业的飞速发展,很多业务的数据量都在急剧的增大,传统的RDBMS数据库逐渐撑不住,逐渐出现读写分离策略、分库分表策略。从数据结构上看,非结构化数据的量在不断剧增。总之,从架构搭建、程序调用到后期运维上,数据库的复杂度变的越来越高,且很多中小型的公司,数据规模都达到了数TB、数PB的级别,对数据的吞吐要求也达到了百万QPS,甚至是千万级别。 HBase的起源   在这样的大背景下,HBase出现了,它是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储...阅读全文

图解golang里面的读写锁实现与核心原理分析

基础筑基 读写锁的特点 读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的 写锁饥饿问题 因为读锁是共享的,所以如果当前已经有读锁,那后续goroutine继续加读锁正常情况下是可以加锁成功,但是如果一直有读锁进行加锁,那尝试加写锁的goroutine则可能会长期获取不到锁,这就是因为读锁而导致的写锁饥饿问题 基于高低位与等待队列的实现 在说golang之前介绍一种JAVA里面的实现,在JAVA中ReentrantReadWriteLock实现采用一个state的高低位来进行读写锁的计数,其中高16位存储读的计数,低16位存储写的计数,并配合一个AQS来实现排队等待机制,同时AQS中的每个waiter都会有一个st...阅读全文

博文 2019-12-25 17:33:47 千锋IJava

Go 生态圈的 K/V 数据库 benchmark

Go生态圈有好几个K/V数据库,我们经常用它来做我们的存储引擎,但是这些数据库引擎的性能如何呢?本文试图用性能而不是功能的数据考察这些数据库,我测试了几种场景: 并发写、并发读、单一写并发读、并发删除,得出了一些有趣的数据。 测试在两台机器上测试的,一台机械硬盘,一台固态硬盘,使用256字节作为value值的大小,9个字节作为key的大小,测试简单的读写删除操作,并没有测试批量读写操作。 每个测试case测试1分钟。 代码: kvbench K/V 数据库 Rocksdb: RocksDB是Facebook维护的高性能的嵌入式K/V数据库。它是LevelDB的克隆版,针对多核、SSD做了很多优化。 LSM tree数据结构。 badger: 一个纯Go实现的快速的嵌入式K/V数据库,针对LS...阅读全文

博文 2019-04-16 14:56:58 smallnest

图解golang里面的读写锁实现与核心原理分析了解编程语言背后设计

基础筑基 读写锁的特点 读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的 写锁饥饿问题 因为读锁是共享的,所以如果当前已经有读锁,那后续goroutine继续加读锁正常情况下是可以加锁成功,但是如果一直有读锁进行加锁,那尝试加写锁的goroutine则可能会长期获取不到锁,这就是因为读锁而导致的写锁饥饿问题 基于高低位与等待队列的实现 在说golang之前介绍一种JAVA里面的实现,在JAVA中ReentrantReadWriteLock实现采用一个state的高低位来进行读写锁的计数,其中高16位存储读的计数,低16位存储写的计数,并配合一个AQS来实现排队等待机制,同时AQS中的每个waiter都会有一个st...阅读全文

博文 2019-12-20 12:32:40 仔仔

2018年总结

2018年瞬时而过,现总结如下。每月做的事情:一月,教师资格面试二月,过年三月,微信转发统计程序四月,忘记。(需要做月总结)五月,学习消防工程师相关内容六月,学习消防工程师相关内容,提升计划去郑州七月,提升计划去郑州学习,带孩子八月,提升计划去郑州学习,入wish坑九月,wish发布商品并编写相关程序十月,wish发布商品并做自动化发布程序十一月,wish被罚弃坑,计划靠python爬虫挣钱坑大,需要账号,ip资源,入golang坑十二月,编了一个月golang,计划解决淘宝客引流问题,ip资源问题去年计划完成情况:去年未制定计划总之,今年理想很多,行动很饱满,现实是没有一个做成的,很失败。自己不断的入坑,弃坑。是自己没有制定2018年计划的原因吗?是一方面,明显今年没有目标,行动比较散乱。...阅读全文

博文 2019-01-02 18:34:47 勇勇_cf62

golang并发编程读写锁sync.RWMutex

一、介绍 sync.RWMutex 为读写锁,lock为写锁定 ,Unlock 为写解锁,RLock为读锁,RUnlock为读解锁。 二、场景 适用于场景:多读一写,读可以同时进行,但是写只能一个写,读写是互斥的要么只能读或者只能写 三、代码测试 功能性测试 第一种场景 测试内容 : 读锁存在的情况下,同时出现读和写的操作,此时优先获取写锁 package main import ( "testing" "fmt" "sync" "time" ) var rwlock = &sync.RWMutex{} var wg = &sync.WaitGroup{} func TestRWMutex(t *testing.T) { //读 wg.Add(1) go rlockwork() time.S...阅读全文

博文 2019-06-27 21:32:40 清晨的麦田

图解golang里面的读写锁实现与核心原理分析了解编程语言背后设计

基础筑基 读写锁的特点 读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的 写锁饥饿问题 因为读锁是共享的,所以如果当前已经有读锁,那后续goroutine继续加读锁正常情况下是可以加锁成功,但是如果一直有读锁进行加锁,那尝试加写锁的goroutine则可能会长期获取不到锁,这就是因为读锁而导致的写锁饥饿问题 基于高低位与等待队列的实现 在说golang之前介绍一种JAVA里面的实现,在JAVA中ReentrantReadWriteLock实现采用一个state的高低位来进行读写锁的计数,其中高16位存储读的计数,低16位存储写的计数,并配合一个AQS来实现排队等待机制,同时AQS中的每个waiter都会有一个st...阅读全文

博文 2019-12-21 00:34:16 代码仔

Go语言(十四)日志项目

日志项目 日志库需求分析 日志库产生的背景 程序运行是个黑盒 日志是程序之外的表现 通过日志,可以知道程序的健康状态 日志打印的级别 Debug:日志最详细,对程序的影响比较大 Trace: 用来追踪问题 Info: 比较重要的信息,比如访问日志 Warn:警告日志,表明程序存在问题 Error: 错误日志,运行程序时发生的错误 Fatal: 严重错误日志 日志存储的位置 直接输出到控制台 打印到文件里 直接打印到网络中,比如kafka 为什么使用接口 定义日志库的标准或者规范 易于扩展 利于程序维护 日志库的设计 打印各个level的日志 设置级别 构造函数 日志库接口设计 log_base.go 基类 package xlog import ( "fmt" "os" "path/file...阅读全文

博文 2020-04-22 11:33:02 wx5b285b48ed74e

【go】sync

sync.once可以控制函数只能被调用一次。不能多次重复调用。 例如:保证channel 关闭只执行一次,避免关闭已关闭的channel导致panic type MyChannel struct { C chan T once sync.Once } func NewMyChannel() *MyChannel { return &MyChannel{C: make(chan T)} } func (mc *MyChannel) SafeClose() { mc.once.Do(func(){ close(mc.C) }) } 更多的实现原理,参考:https://cloud.tencent.com/dev... sync.Mutex 互斥锁它能够保证同时只有一个 goroutine 可以...阅读全文

博文 2020-05-20 23:32:42 阿阿阿黄