Golang では、DNS の設定は非常に一般的な要件です。この記事では、Golang で使用する DNS を設定する方法について説明します。
DNS (ドメイン ネーム システム) は、ドメイン名を IP アドレスに解決するために使用される分散データベース システムです。デフォルトでは、Golang はオペレーティング システムによって提供される DNS サーバーを使用します。これは通常、ローカル DNS サーバーですが、リモート DNS サーバーである場合もあります。ただし、別の DNS サーバーを使用する場合、またはネットワークに他の制限がある場合は、デフォルト設定を変更する必要があります。
Golang で DNS を設定する方法は次のとおりです。
package main import ( "context" "fmt" "net" "time" ) func main() { //创建一个context对象,用于超时控制 ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() //设置Google DNS服务器的地址 resolver := &net.Resolver{ PreferGo: true, Dial: func(ctx context.Context, network, address string) (net.Conn, error) { d := net.Dialer{} return d.DialContext(ctx, "udp", "8.8.8.8:53") }, } //解析域名 ips, err := resolver.LookupIPAddr(ctx, "google.com") if err != nil { panic(err) } //打印解析结果 for _, ip := range ips { fmt.Println(ip.IP) } }
上記のコードでは、net.Resolver オブジェクトを作成し、その Dial メソッドを Google DNS サーバーに接続するように設定します。次に、それを使用して google.com ドメイン名を解決し、その IP アドレスのリストを出力します。
package main import ( "fmt" "net" "time" ) func main() { //创建一个默认的Dialer对象 dialer := net.Dialer{ Timeout: time.Second * 10, KeepAlive: time.Second * 60, } //使用Dialer对象连接Google DNS服务器 conn, err := dialer.Dial("udp", "8.8.8.8:53") if err != nil { panic(err) } defer conn.Close() //使用连接发送DNS请求 //这里略过 //... //打印响应结果 //这里略过 //... }
上記のコードでは、net.Dialer オブジェクトを作成し、その Timeout プロパティと KeepAlive プロパティを設定します。次に、このオブジェクトを使用して Google の DNS サーバーに接続し、DNS リクエストを送信します。これには接続とリクエストの送信に関連するコードのみが含まれることに注意してください。実際には、DNS プロトコルの応答処理部分を自分で実装する必要があります。
概要
DNS サーバーのセットアップは非常に一般的な要件であり、Golang はそれを実現するためのさまざまな方法を提供します。 net.Resolver オブジェクトを使用することも、net.Dialer オブジェクトを使用することもできます。どの方法を使用する場合でも、プログラムをネットワーク障害や攻撃から保護するには、適切なエラー処理とタイムアウト制御が必要です。
以上がgolang で DNS を設定する方法について説明します (方法の簡単な分析)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。