Small Libraries
28.11.2013
feedback := make(chan int)
circuit.Spawn("host25.datacenter.net", func() {
feedback <- 1
})
<-feedback
println("Roundtrip complete.")import _ "circuit/load/cmd"
import "circuit/use/circuit"
Spawn(host circuit.Host, anchor []string, f circuit.Func, in ...interface{})
(out []interface{}, addr circuit.Addr, err error)import "circuit/use/circuit"
type MyWorkerFunc struct{}
func (MyWorkerFunc) SingletonMethod(greeting string) (response string) {
return "Hello " + greeting
}
func init() {
circuit.RegisterFunc(MyWorkerFunc{})
}import "circuit/use/circuit"
type StartServer struct{}
func (StartServer) Main() (hostport string, err error) {
server, err := StartLocalWebServer() // Bind a web server
if err != nil {
return "", err
}
go func() { // Start accepting requests in new goroutine
for { server.AcceptNext() }
}()
return server.HostPort(), nil // Communicate the URL of the server to the caller
}
func init() {
circuit.RegisterFunc(StartServer{})
}...
circuit.RunInBack(func() {
for { server.AcceptNext() }
})
...func (fs *FileSystem) Open(name string) (*File, error) {
…
return file, nil
}func (fs *FileSystem) Open(name string) (circuit.X, error) {
…
return circuit.Ref(file), nil
}Call(proc string, in ...interface{}) []interface{}gob!?
Binary values exchanged between an Encoder (transmitter) and a Decoder (receiver)
self-describing)Ако изпратим:
type T struct{ X, Y, Z int }
var t = T{X: 7, Y: 0, Z: 8}Можем да ги получим като:
type U struct{ X, Y *int8 }("define type id" 127, definition of type T)(127, T value)(127, T value), ...reflection в началото се изготвят правилата, по които ще се encode-ваОчевидно ще си говорим за json от тук нататък.
The process of transforming the memory representation of an object to a data format suitable for storage or transmission
Някои му викат сериализация
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() { type ColorGroup struct { ID int `asdasdsad:",string"` Name string Colors []string } group := ColorGroup{ Name: "Reds", Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) }
Pros:
Cons:
На всяка стойност в strcut можем да прилагаме тагове за конкретен формат.
Field int `json:"-"` // Няма да бъде сериализрано Field int `json:"myName,string"` // Ще бъде сериализрано като myName от тип string Field int `json:",omitempty"` // Няма да бъде сериализирано, ако е празно
Очевидно ако получим вече сериализиран json, можем да го десериализираме.
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
Пакет, в стандартната библиотека, който съдържа няколко операции, заобикалящи type safety-то на езика.
Нямаме особено добра идея защо са ви...
func Alignof(v ArbitraryType) uintptrfunc Offsetof(v ArbitraryType) uintptrfunc Sizeof(v ArbitraryType) uintptrСъдържа примитиви от ниско ниво за разни операции, които сме сигурни, че са атомарни.
Функцията CompareAndSwapT е аналогична на:
if *addr == old {
*addr = new
return true
}
return false