2016-06-07 3 views
-4

У меня есть сценарий, написанный в Голанге, который я не совсем понимаю. Я хочу знать, почему он написал go server.Start() внутри скрипта? Почему бы просто не написать server.Start?Golang: запустить команду внутри скрипта?

package main 

import (
    "github.com/miekg/dns" 
    "testing" 
    "time" 
) 

const TEST_ADDR = "127.0.0.1:9953" 

func TestDNSResponse(t *testing.T) { 
    server := NewDNSServer(&Config{ 
     dnsAddr: TEST_ADDR, 
    }) 
    go server.Start() 

    // Allow some time for server to start 
    time.Sleep(150 * time.Millisecond) 

    m := new(dns.Msg) 
    m.Id = dns.Id() 
    m.Question = []dns.Question{ 
     dns.Question{"docker.", dns.TypeA, dns.ClassINET}, 
    } 
    c := new(dns.Client) 
    _, _, err := c.Exchange(m, TEST_ADDR) 

    if err != nil { 
     t.Error("Error response from the server", err) 
    } 

    server.Stop() 

    c = new(dns.Client) 
    _, _, err = c.Exchange(m, TEST_ADDR) 

    if err == nil { 
     t.Error("Server still running but should be shut down.") 
    } 
} 

ответ

0

Если вы вызываете функцию с префиксом го ключевого слова оно будет вызывать функцию в качестве goroutine. Горотин - это функция, которая может работать одновременно с другими функциями.

Обычно, когда мы вызываем функцию, она выполняет все операторы функций в нормальном порядке, а затем возвращается к следующей строке, следующей за вызовом. С помощью goroutine мы немедленно возвращаемся к следующей строке и не дожидаемся завершения функции.

Смежные вопросы