Golang verwendet diese Methode

WBOY
Freigeben: 2023-05-10 09:26:06
Original
2385 Leute haben es durchsucht

Golang (auch bekannt als Go) ist eine von Google entwickelte Programmiersprache, hauptsächlich für Netzwerkanwendungen und verteilte Systeme. Es bietet die Vorteile einer effizienten Speicherverwaltung und einer hervorragenden Parallelitätsleistung und wird daher von immer mehr Entwicklern bevorzugt. In Golang können wir SO-Dateien verwenden, um Bibliotheksfunktionen in Sprachen wie C zu implementieren und so unsere Golang-Programmierung sowie die Wiederverwendbarkeit und Flexibilität des Codes zu verbessern. In diesem Artikel wird anhand konkreter Fälle erläutert, wie die so-Methode in Golang verwendet wird.

1. Was ist eine SO-Datei?

SO-Datei, der vollständige Name lautet Shared Object File (Shared Object File), auch bekannt als Dynamic Linking Library (Dynamic Linking Library), ist eine verschiebbare Zieldatei, die ein Programm sein kann Anruf teilen. Im Linux-System ist die Dynamic Link Library eine wichtige Komponente. Verschiedene Systembibliotheken und Anwendungen können in Form von SO-Dateien bereitgestellt werden, wodurch die Entwicklung und Wartung von Anwendungen erleichtert wird. In der C-Sprache können wir den Befehl gcc verwenden, um die .c-Datei in eine .so-Datei zu kompilieren und sie dann zur Verwendung mit unserer Anwendung zu verknüpfen. In Golang können wir auch die cgo-Methode verwenden, um die .so-Datei zum Aufrufen mit unserem Programm zu verknüpfen.

2. Beispiele für die Verwendung von so-Dateien in Golang

Nachfolgend nehmen wir die MD5-Berechnung von Golang durch so-Dateien als Beispiel:

  1. Schreiben Sie C-Sprachcode und generieren Sie .so-Dateien

Wir schreiben zunächst eine md5.c-Datei, die zur Berechnung des MD5-Werts verwendet wird:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>

char* md5(char* str){
    MD5_CTX md5;
    MD5_Init(&md5);
    MD5_Update(&md5, str, strlen(str));
    unsigned char md[16];
    MD5_Final(md, &md5);

    char* result = (char*)malloc(sizeof(char) * 33);
    memset(result, '', sizeof(result));
    int i = 0;
    for(i = 0; i < 16; i++){
        sprintf(result + i * 2, "%02x", md[i]);
    }

    return result;
}
Nach dem Login kopieren

In diesem C-Sprachcode verwenden wir den MD5-Algorithmus in der OpenSSL-Bibliothek, um den MD5-Wert zu berechnen. Es ist zu beachten, dass wir, da Golang die CGO-Methode zum Aufrufen der C-Sprache verwenden muss, „// #include “ vor dem C hinzufügen müssen Sprachfunktionsdefinition. „Ein solcher Kommentar, wobei „C:mingw-w64x86_64-8.1.0-posix-seh-rt_v6-rev0mingw64include“ der Header-Dateipfad der OpenSSL-Bibliothek in unserem MinGW-Compiler ist.

Als nächstes verwenden wir den Befehl gcc, um md5.c in eine .so-Datei zu kompilieren:

gcc -shared -o libmd5.so md5.c -fPIC -I /usr/local/opt/openssl/include -L /usr/local/opt/openssl/lib -lcrypto
Nach dem Login kopieren

Im obigen Befehl gibt

  • -shared die Generierung gemeinsamer Objektdateien an;
  • -o gibt den dynamischen Ausgabelink an Name der Bibliotheksdatei;
  • md5.c ist unsere Quellcodedatei;
  • -fPIC gibt an, dass die generierten Codeausschnitte von mehreren Anwendungen gemeinsam genutzt werden können;
  • -I /usr/local/opt/openssl/include und -L /usr/local/opt/openssl/lib gibt den Pfad zur OpenSSL-Bibliotheksdatei an;
  • -lcrypto gibt die Link-Verschlüsselungsbibliotheksdatei an.
  1. Golang-Code schreiben

Als nächstes schreiben wir eine main.go-Datei, um die MD5-Funktion in der .so-Datei aufzurufen. Der spezifische Code lautet wie folgt:

package main

/*
#cgo LDFLAGS: -L./ -lmd5
#include <stdlib.h>

//引入C语言中的md5函数
char* md5(char* str);

//封装C语言函数,以便在Go中使用
char* c_md5(char* str){
    return md5(str);
}
*/
import "C"
import (
    "fmt"
    "unsafe"
)

func main() {
    str := "hello world"
    cstr := C.CString(str)
    defer C.free(unsafe.Pointer(cstr))

    md5 := C.GoString(C.c_md5(cstr))
    fmt.Println(md5)
}
Nach dem Login kopieren

In diesem Golang-Code verwenden wir die cgo-Methode , Verknüpfen Sie die MD5-Funktion in der C-Sprache mit dem Golang-Code und rufen Sie die MD5-Funktion in der C-Sprache über die Go-Sprache auf, um den MD5-Wert der Zeichenfolge zu berechnen. Es ist zu beachten, dass wir zunächst den Kommentar „// #cgo LDFLAGS: -L./ -lmd5“ verwendet haben, um den Pfad und Namen der .so-Datei anzugeben, damit die Go-Sprache die .so-Datei während der Kompilierung korrekt verknüpfen kann

Zweitens haben wir die MD5-Funktion in der C-Sprache durch die beiden Kommentare „// Einführung der MD5-Funktion in C-Sprache“ und „// Kapselung der C-Sprachfunktion zur Verwendung in Go“ deklariert Sprachfunktion c_md5, damit wir C-Sprachfunktionen problemlos in der Go-Sprache aufrufen können

Schließlich konvertieren wir die Zeichen über die Funktion C.CString() in C-Strings und wandeln schließlich den C-String mit C.GoString() zurück zum String-Typ in der Go-Sprache. Es sollte auch beachtet werden, dass wir die Funktion C.free() manuell aufrufen müssen, um Speicher freizugeben, nachdem wir die Funktion C.CString() zum Konvertieren der Zeichenfolge in C-Sprachzeichen verwendet haben, um Speicherverluste zu vermeiden.

3. Zusammenfassung

Durch diesen einfachen Fall haben wir gelernt, wie wir die so-Methode in Golang verwenden, um unsere Programmiereffizienz durch Verknüpfen von C-Sprachbibliotheksdateien zu verbessern. Es ist zu beachten, dass wir bei der Verwendung dieser Dateien auf den Pfad jeder Datei und die Version des Compilers und der Bibliothek achten müssen. Insbesondere auf Mac OS-Systemen können Versions- und Supportprobleme auftreten, die in tatsächlichen Anwendungen zu Problemen führen können . Es sind einige Schwierigkeiten und Probleme aufgetreten. Wir glauben jedoch, dass diese Probleme durch die gemeinsamen Anstrengungen aller Entwickler Schritt für Schritt gelöst werden und die Entwicklungseffizienz von Golang immer höher wird.

Das obige ist der detaillierte Inhalt vonGolang verwendet diese Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!