Go-tour 练习 解答 - 轩 脉 刃 - 博客 园

go-tour 对于 想 学习 golang 的 人 来说 是 一个 很好 的 教程.

首先 go-tour 是 有 web 版本, 但是 需要 FQ. 能 不能 FQ 的, 也 可以 在 codice google 上 自己 下载 go-tour 源码, vai a costruire, corri 一下, 在 自己 的 机器 上 就 可以 跑 这个 这个 了.

提醒 下, 如果 是 后者, 这篇 文章 中 的 程序 对应 的 importazione 包 就 需要 进行 相应 修改 了.

下面 给出 我 的 go-tour 中 的 Esercizio 的 解答 (在 web 上 已经 测试 通过)

第一个循环10次:

pacchetto principaleimportazione ( "FMT")func Sqrt (x float64) float64 { z: = float64 (1) per i: = 0; i <= 10; io ++ { z = z - (z * z - x) / (2 * z) } ritorno z}func main () { fmt.Println (sqrt (2))}

第二次无限接近:

pacchetto principaleimportazione ( "FMT" "matematica")func Sqrt (x float64) float64 { z: = float64 (1) per { y: = z - (z * z - x) / (2 * z) se matematica.Abs (y - z) <1e-10 { ritorna y } z = y; } ritorno z}func main () { fmt.Println (sqrt (2)) fmt.Println (Math.sqrt (2))}
pacchetto principaleimportazione ( "Tour / wc" "stringhe")func WordCount (s stringa) map [stringa] int { ret: = make (map [string] int) arr: = strings.Fields (s) per _, val: = range arr { ret [val] ++ } ritorno ret}func main () { wc.Test (WordCount)}
pacchetto principaleimport "tour / pic"func Pic (dx, dy int) [] [] uint8 { ret: = make ([] [] uint8, dy) per i: = 0; i <dy; io ++ { ret [i] = make ([] uint8, dx) per j: = 0; j <dx; j ++ { ret [i] [j] = uint8 (i * j) } } ritorno ret}func main () { pic.Show (Pic)}
pacchetto principaleimportare "fmt"// fibonacci è una funzione che ritorna// una funzione che restituisce un int.func fibonacci () func () int { sum1: = 0 sum2: = 1 return func () int { out: = sum1 + sum2 sum1 = sum2 sum2 = out ritorna }}func main () { f: = fibonacci () per i: = 0; i <10; io ++ { fmt.Println (f ()) }}
pacchetto principaleimportazione ( "FMT" "Math / CMPLX" )func Cbrt (x complex128) complex128 { z: = complex128 (1) per { se y: = z- (cmplx.Pow (z, 3) - x) / (3 * z * z); cmplx.Abs (y - z) <1e-10 { ritorna y } altro { z = y } } ritorno z}func main () { fmt.Println (CBRT (2))}
pacchetto principaleimportazione ( "FMT" "matematica")digitare ErrNegativeSqrt float64func (e ErrNegativeSqrt) Error () string { return "can not Sqrt numero negativo:" + fmt.Sprint (float64 (e))}func Sqrt (f float64) (float64, errore) { se f <0 { return 0, ErrNegativeSqrt (f) } z: = float64 (1) per { y: = z - (z * z-f) / (2 * z) se matematica.Abs (y-z) <1e-10 { ritorna y, nil } z = y } return z, nil}func main () { fmt.Println (sqrt (2)) fmt.Println (Sqrt (-2))}
pacchetto principaleimportazione ( "Immagine" "Tour / pic" "Image / colore")digita Image struct { W int Int}func (self Image) Bounds () image.Rectangle { return image.Rect (0, 0, self.W, self.H)}func (self Image) ColorModel () color.Model { return color.RGBAModel}func (self Image) At (x, y int) color.Color { return color.RGBA {uint8 (x), uint8 (y), 255, 255}}func main () { m: = Immagine {W: 100, H: 100} pic.ShowImage (m)}
pacchetto principaleimportazione ( "Io" "Os" "stringhe")scrivi rot13Reader struct { r io.Reader}func (self rot13Reader) Read (p [] byte) (n int, err error) { self.r.Read (p) leng: = len (p) per i: = 0; io <leng; io ++ { interruttore{ case p [i]> = 'a' && p [i] <'n': sfumare case p [i]> = 'A' && p [i] <'N': p [i] = p [i] + 13 case p [i]> = 'n' && p [i] <= 'z': sfumare case p [i]> = 'N' && p [i] <= 'Z': p [i] = p [i] - 13 } } return leng, nil}func main () { s: = strings.NewReader ( "Lbh penpxrq gur pbqr!") r: = rot13Reader {s} io.Copy (os.Stdout, & r)}
pacchetto principaleimportazione ( "Tour / albero" )// Walk cammina l'albero inviando tutti i valori// dall'albero al canale ch.func Walk (t * tree.Tree, ch chan int) { se t == nil { ritorno } Cammina (t.Left, ch) ch <- t.Valore Cammina (t.Right, ch)}// Lo stesso determina se gli alberi// t1 e t2 contengono gli stessi valori.func Stesso (t1, t2 * tree.Tree) bool { ch1: = make (chan int) ch2: = make (chan int) go func () { Cammina (t1, ch1) ch1 <- 0 } () go func () { Cammina (t2, ch2) ch2 <- 0 } () per { t1: = <-ch1 t2: = <-ch2 se t1 == 0 && t2 == 0 { ritorna vero; } se t1 == t2 { Continua; } altro { restituisce falso; } } ritorna vero}func main () { ch: = make (chan int) go func () { Cammina (tree.New (1), ch) ch <- 0 } () per { t: = <-ch se t == 0 { rompere; } println (t) } println (stesso (tree.New (1), tree.New (2)))}
pacchetto principaleimportazione ( "FMT" "Sync")digita l'interfaccia Fetcher { // Fetch restituisce il corpo dell'URL e // una sezione di URL trovati su quella pagina. Fetch (url string) (body string, urls [] string, err error)}// La scansione utilizza fetcher per eseguire la scansione ricorsivamente// pagine che iniziano con url, fino ad un massimo di profondità.func Crawl (url string, depth int, fetcher Fetcher, out chan string, end chan bool) { se profondità <= 0 { fine <- vero ritorno } if _, ok: = crawled [url]; ok { fine <- vero ritorno } crawledMutex.Lock () crawled [url] = true crawledMutex.Unlock () body, urls, err: = fetcher.Fetch (url) se err! = nil { fuori <- fmt.Sprintln (err) fine <- vero ritorno } out <- fmt.Sprintf ("trovato:% s% q \ n", url, corpo) subEnd: = make (chan bool) per _, u: = range urls { vai Scansione (u, depth-1, fetcher, out, subEnd) } per i: = 0; i <len (urls); io ++ { <- subEnd } fine <- vero}var crawled = make (mappa [stringa] bool)var crawledMutex sync.Mutexfunc main () { out: = make (stringa chan) fine: = make (chan bool) go Crawl ("http://golang.org/", 4, fetcher, out, end) per { seleziona { caso t: = <- out: fmt.Print (t) caso <- fine: ritorno } }}// fakeFetcher è Fetcher che restituisce risultati in scatola.type fakeFetcher map [string] * fakeResultdigita la struttura di fakeResult { stringa del corpo urls [] stringa}func (f * fakeFetcher) Fetch (stringa url) (stringa, [] stringa, errore) { se res, ok: = (* f) [url]; ok { ritorno res.body, res.urls, nil } return "", nil, fmt.Errorf ("non trovato:% s", url)}// fetcher è un falso populatore popolato.var fetcher = & fakeFetcher { "http://golang.org/": & fakeResult { "The Go Programming Language", []stringa{ "Http://golang.org/pkg/", "Http://golang.org/cmd/", }, }, "http://golang.org/pkg/": & fakeResult { "Pacchetti", []stringa{ "Http://golang.org/", "Http://golang.org/cmd/", "Http://golang.org/pkg/fmt/", "Http://golang.org/pkg/os/", }, }, "http://golang.org/pkg/fmt/": ​​& fakeResult { "Pacchetto fmt", []stringa{ "Http://golang.org/", "Http://golang.org/pkg/", }, }, "http://golang.org/pkg/os/": & fakeResult { "Pacchetto OS", []stringa{ "Http://golang.org/", "Http://golang.org/pkg/", }, },}

Go-tour 练习 解答 - 轩 脉 刃 - 博客 园

L'altoparlante Home di Google è un assistente personale intelligente e multitasking che risponde alle frasi della sveglia, "OK, Google" o "Ehi, Google". Questo dispositivo intelligente non solo è in grado di controllare luci, lucchetti e altri prodotti collegati, ma può anche guidarti attraverso le routine di allenamento. Ecco come iniziare a utilizzare Google Home come personal trainer personale oggi.

In riproduzione: Guarda questo: Come utilizzare Google Home come personal trainer

0:55

1. Acquista un oratore di Google Home

Per prima cosa: hai bisogno di un oratore di Google Home. A differenza di Amazon, Google attualmente vende solo un modello: $ 130 Home di Google (£ 130 / AU $ 175). Questo altoparlante plug-in si connette tramite Wi-Fi in modo da poter fare domande - e dargli comandi - per tutto il giorno.

2. Scarica l'app Google Home

Una volta che hai il tuo oratore di Google Home, devi scaricare l'app Google Home (disponibile per Android e iPhone). Accedi con il tuo account Google esistente o segui le istruzioni per crearne uno nell'app.

3. Imposta l'altoparlante

Collega la tua Home page a Google usando l'adattatore incluso e segui le istruzioni in-app per accedere alla tua rete Wi-Fi locale.

Hai ancora domande? Consulta la pagina di supporto di Google per ulteriori dettagli sulla configurazione.

4. Inizia il tuo allenamento

Google ospita varie integrazioni nella sezione "Assistant apps" dell'app Google Home. Ecco dove troverai la piccola lista di partnership per il fitness di Google. 5-Minute Plank e Fitstar sono le due opzioni principali. Dì "OK, Google - parla con 5 minuti di Plank" o "Hey, Google, voglio parlare con Fitstar" per iniziare a lavorare con Google Home. A differenza delle abilità Alexa di Amazon, non è necessario "abilitare" queste abilità prima di usarle.

Hai un altoparlante Amazon Alexa? Leggi come convertirlo nell'assistente di esercizio personale.

CNET Smart Home
4.2
5
15
4
2
3
3
2
1
1
1