1647286440
bloomfilter
Yet another Bloomfilter implementation in Go, compatible with Java's Guava library. This library borrows how Java's Guava libraray implements Bloomfilter hashing strategies to achieve the serialization compatibility.
First pull the latest version of the library:
go get github.com/OldPanda/bloomfilter
Then import the this library in your code:
import "github.com/OldPanda/bloomfilter"
package main
import (
"fmt"
"github.com/OldPanda/bloomfilter"
)
func main() {
// create bloomfilter with expected insertion=500, error rate=0.01
bf, _ := bloomfilter.NewBloomFilter(500, 0.01)
// add number 0~199 into bloomfilter
for i := 0; i < 200; i++ {
bf.Put(i)
}
// check if number 100 and 200 are in bloomfilter
fmt.Println(bf.MightContain(100))
fmt.Println(bf.MightContain(200))
}
package main
import "github.com/OldPanda/bloomfilter"
func main() {
// expected insertion=500, error rate=0.01
bf, _ := bloomfilter.NewBloomFilter(500, 0.01)
// add 0~199 into bloomfilter
for i := 0; i < 200; i++ {
bf.Put(i)
}
// serialize bloomfilter to byte array
bytes := bf.ToBytes()
// handling the bytes ...
}
package main
import (
"fmt"
"github.com/OldPanda/bloomfilter"
)
func main() {
// create bloomfilter from byte array
bf, _ := bloomfilter.FromBytes(bytes)
// check whether number 100 is in bloomfilter
fmt.Println(bf.MightContain(100))
}
The benchmark testing runs on element insertion and query separately.
» go test -bench . -benchmem ./...
# github.com/OldPanda/bloomfilter.test
goos: darwin
goarch: amd64
pkg: github.com/OldPanda/bloomfilter
cpu: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
BenchmarkBloomfilterInsertion-8 4923142 387.1 ns/op 17 B/op 1 allocs/op
BenchmarkBloomfilterQuery-8 4678299 259.6 ns/op 15 B/op 1 allocs/op
BenchmarkBloomfilterDeserialization-8 162871 7110 ns/op 13200 B/op 52 allocs/op
PASS
ok github.com/OldPanda/bloomfilter 4.880s
Author: OldPanda
Source Code: https://github.com/OldPanda/bloomfilter
License: MIT License
1599854400
Go announced Go 1.15 version on 11 Aug 2020. Highlighted updates and features include Substantial improvements to the Go linker, Improved allocation for small objects at high core counts, X.509 CommonName deprecation, GOPROXY supports skipping proxies that return errors, New embedded tzdata package, Several Core Library improvements and more.
As Go promise for maintaining backward compatibility. After upgrading to the latest Go 1.15 version, almost all existing Golang applications or programs continue to compile and run as older Golang version.
#go #golang #go 1.15 #go features #go improvement #go package #go new features
1647286440
bloomfilter
Yet another Bloomfilter implementation in Go, compatible with Java's Guava library. This library borrows how Java's Guava libraray implements Bloomfilter hashing strategies to achieve the serialization compatibility.
First pull the latest version of the library:
go get github.com/OldPanda/bloomfilter
Then import the this library in your code:
import "github.com/OldPanda/bloomfilter"
package main
import (
"fmt"
"github.com/OldPanda/bloomfilter"
)
func main() {
// create bloomfilter with expected insertion=500, error rate=0.01
bf, _ := bloomfilter.NewBloomFilter(500, 0.01)
// add number 0~199 into bloomfilter
for i := 0; i < 200; i++ {
bf.Put(i)
}
// check if number 100 and 200 are in bloomfilter
fmt.Println(bf.MightContain(100))
fmt.Println(bf.MightContain(200))
}
package main
import "github.com/OldPanda/bloomfilter"
func main() {
// expected insertion=500, error rate=0.01
bf, _ := bloomfilter.NewBloomFilter(500, 0.01)
// add 0~199 into bloomfilter
for i := 0; i < 200; i++ {
bf.Put(i)
}
// serialize bloomfilter to byte array
bytes := bf.ToBytes()
// handling the bytes ...
}
package main
import (
"fmt"
"github.com/OldPanda/bloomfilter"
)
func main() {
// create bloomfilter from byte array
bf, _ := bloomfilter.FromBytes(bytes)
// check whether number 100 is in bloomfilter
fmt.Println(bf.MightContain(100))
}
The benchmark testing runs on element insertion and query separately.
» go test -bench . -benchmem ./...
# github.com/OldPanda/bloomfilter.test
goos: darwin
goarch: amd64
pkg: github.com/OldPanda/bloomfilter
cpu: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
BenchmarkBloomfilterInsertion-8 4923142 387.1 ns/op 17 B/op 1 allocs/op
BenchmarkBloomfilterQuery-8 4678299 259.6 ns/op 15 B/op 1 allocs/op
BenchmarkBloomfilterDeserialization-8 162871 7110 ns/op 13200 B/op 52 allocs/op
PASS
ok github.com/OldPanda/bloomfilter 4.880s
Author: OldPanda
Source Code: https://github.com/OldPanda/bloomfilter
License: MIT License
1596793260
http
package to create and initialize HTTPS servers in Go.(source: unsplash.com)
In the “Simple Hello World Server” lesson, we learned about net/http
package, how to create routes and how [ServeMux](https://golang.org/pkg/net/http/#ServeMux)
works. In the “Running multiple HTTP servers” lesson, we learned about [Server](https://golang.org/pkg/net/http/#Server)
structure and how to run multiple HTTP servers concurrently.
In this lesson, we are going to create an HTTPS server using both Go’s standard server configuration and custom configuration (using [_Server_](https://golang.org/pkg/net/http/#Server)
structure). But before this, we need to know what HTTPS really is?
HTTPS is a big topic of discussion in itself. Hence while writing this lesson, I published an article just on “How HTTPS works?”. I advise you to read this lesson first before continuing this article. In this article, I’ve also described the encryption paradigm and SSL certificates generation process.
If we recall the simplest HTTP server example from previous lessons, we only need http.``[ListenAndServe](https://golang.org/pkg/net/http/#ListenAndServe)
function to start an HTTP server and http.``[HandleFunc](https://golang.org/pkg/net/http/#HandleFunc)
to register a response handler for a particular endpoint.
(https://play.golang.org/p/t3sOenOYAzS)
In the example above, when we run the command go run server.go
, it will start an HTTP server on port 9000
. By visiting http://localhost:9000
URL in a browser, you will be able to see a Hello World!
message on the screen.
As we know, the nil
argument to ListenAndServe()
call invokes Go to use the [DefaultServeMux](https://golang.org/pkg/net/http/#DefaultServeMux)
response multiplexer, which is the default instance of ServeMux
structure provided globally by the Go. The HandleFunc()
call adds a response handler for a specific route on the multiplexer instance.
The http.ListenAndServe()
call uses the Go’s standard HTTP server configuration, however, in the previous lesson, how we can customize a server using [Server](https://golang.org/pkg/net/http/#Server)
structure type.
To start an HTTPS server, all we need do is to call ServerAndListenTLS
method with some configuration. Just like ServeAndListen
method, this method is available on both the http
package and the Server
structure.
The http.``[ServeAndListenTLS](https://golang.org/pkg/net/http/#ListenAndServeTLS)
method uses the Go’s standard server implementation, however, both [Server](https://golang.org/pkg/net/http/#Server)
instance and Server.``[ServeAndListenTLS](https://golang.org/pkg/net/http/#Server.ListenAndServeTLS)
method can be configured for our needs.
#go-programming-language #go #golang-tutorial #go-programming #golang
1660288320
go-couchdb is yet another CouchDB client written in Go. It was written because all the other ones didn't provide functionality that I need.
The API is not fully baked at this time and may change.
This project contains three Go packages:
import "github.com/fjl/go-couchdb"
This wraps the CouchDB HTTP API.
import "github.com/fjl/go-couchdb/couchapp"
This provides functionality similar to the original couchapp tool, namely compiling a filesystem directory into a JSON object and storing the object as a CouchDB design document.
import "github.com/fjl/go-couchdb/couchdaemon"
This package contains some functions that help you write Go programs that run as a daemon started by CouchDB, e.g. fetching values from the CouchDB config.
Tests
You can run the unit tests with go test
.
Author: fjl
Source Code: https://github.com/fjl/go-couchdb
License: MIT license
1655304840
Building Web Applications with Go
Welcome, gopher! You're not a gopher? Well, this workshop is for gophers, or people that use the Go programming language. But fear not if you've never written any Go before! I'd recommend you learn the basics for the language first with the Go tour.
This workshop has been run a couple of times with an instructor leading. The goal of this repo is to make it as easy as possible for individuals to follow the content by themselves. If you get stuck at any point, feel free to file issues asking questions.
To go through this you will need the following:
GOPATH
by following the How to Write Go Code tutorial.There's a lot to say about how to build web applications, in Go or any other language. But we only have one day so we won't try to cover too much. Instead we'll cover the basics, so you'll be able to explore other solutions and frameworks later.
The workshops is divided in eleven sections:
These are places where you can find more information for Go:
My favorite aspect of Go is its community, and you are now part of it too. Welcome!
As a newcomer to the Go community you might have questions or get blocked at some point. This is completely normal, and we're here to help you. Some of the places where gophers tend to hang out are:
This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google.
Author: Campoy
Source Code: https://github.com/campoy/go-web-workshop
License: Apache-2.0 license