Golang は、メモリの安全性と高い同時実行機能で人気のある最新のプログラミング言語のオープンソース プログラミング言語です。 Golang では、DNS の設定も一般的なニーズですが、そのプロセスはそれほど単純ではありません。この記事ではGolang言語をベースに、プログラム内でDNSを設定する方法を紹介します。
1. DNS の基礎知識
Domain Name System (DNS) はインターネットのサービスで、ドメイン名と IP アドレスを相互にマッピングする分散データベースとして、人々がインターネットにアクセスしやすくなります。 IP アドレスと比較して、ドメイン名は覚えやすく直感的であるため、ユーザーの使用効率が大幅に向上します。
コンピュータ ユーザーがブラウザまたはその他のインターネット アプリケーションにドメイン名を入力すると、ユーザーのコンピュータはまずローカル ドメイン ネーム サーバーにリクエストを送信します。ローカル ドメイン ネーム サーバーにドメイン名のマッピング情報がない場合は、ドメイン名を指定すると、国際ドメイン名サーバーにリクエストが送信され、DNS が照会されて、対応する IP アドレスが最終的に返されます。
2. Golang での DNS 設定方法
Golang では、net
パッケージの ResolveIPAddr
メソッドを使用して DNS アドレス解決を行うことができます。 ResolveIPAddr
この関数はネットワーク タイプとアドレス文字列を受け取り、IP アドレスを返します。 DNS 解決を使用してドメイン名をアドレスに解決する基本的なプログラム例を次に示します。
package main import ( "fmt" "net" ) func main() { ip, err := net.ResolveIPAddr("ip", "www.google.com") if err != nil { fmt.Println("解析域名失败!", err) return } fmt.Println("Google 的 IP 地址是:", ip) }
上記のコードを実行すると、出力で Google の IP アドレス情報を確認できます。
ただし、場合によっては、より細かく制御するために DNS アドレスを手動で設定する必要があります。 DNS は、net
パッケージの Dialer
タイプを使用して設定できます。以下は、ローカル DNS アドレスを設定するためのサンプル コードです。
package main import ( "fmt" "net" "net/http" "time" ) func main() { // 创建一个新的 Dialer d := &net.Dialer{ Timeout: 30 * time.Second, // 连接超时时间 KeepAlive: 30 * time.Second, // 保持连接 DualStack: true, // 支持 IPv4 和 IPv6 } // 设置 DNS resolver := &net.Resolver{ PreferGo: true, Dial: d.Dial, } // 将代理设置为 http.Transport 中的 Dial 函数 transport := &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, // 连接超时时间 KeepAlive: 30 * time.Second, // 保持连接 DualStack: true, // 支持 IPv4 和 IPv6 Resolver: resolver, // 使用新设置的解析器 }).DialContext, TLSHandshakeTimeout: 10 * time.Second, // TLS 握手超时时间 } // 设置 http 客户端 client := &http.Client{ Timeout: time.Second * 60, // 超时时间 Transport: transport, // 使用新设置的 transport } // 访问一个带有 DNS 规则的网站 req, err := http.NewRequest(http.MethodGet, "http://www.google.com", nil) if err != nil { fmt.Println(err) return } resp, err := client.Do(req) if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } fmt.Println(string(body)) }
上記のコードでは、net.Dialer
タイプを使用して、タイムアウトやサポートされている接続のパラメーターを設定します。プロトコルの種類。 net.Resolver
タイプを使用して、Go の DNS リゾルバーの使用を優先する、接続に net.Dialer
を使用するなど、DNS のいくつかのパラメーターを設定し、それを # に渡します。 #net.Dialer の
#Resolver プロパティ。
http.Transport の 2 番目の DialContext 関数を使用して、新しいパーサーを設定します。最後に、
http クライアントで新しい
Transport を使用します。
net パッケージを使用すると、ドメイン名を解析し、IP アドレスへの変換を試みることができます。同時に、プログラムの機能をより適切に制御するために、
net.Dialer と
http.Transport の 2 つのタイプを使用して、より正確に制御することもできます。もちろん、実際の開発では、特定のニーズと環境を組み合わせて、それに対応した開発設定方法を採用する必要がある場合があります。
以上がgolang の DNS 設定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。