[golang]Android 或 iOS 原生代碼中調用golang撰寫的庫,舉例說明

在 Android 或 iOS 原生代碼中調用用 Go 語言撰寫的庫,通常是通過將 Go 編譯成原生庫(如 .aar.framework)來實現的。這樣可以讓 Android 或 iOS 應用調用 Go 函數。下面我將分別介紹如何在 Android 和 iOS 中調用 Go 語言寫的庫,並提供具體的範例。

一、在 Android 中調用 Go 撰寫的庫

步驟 1: 編寫 Go 代碼

假設我們編寫了一個簡單的 Go 函數來計算兩個數字的和:

go

package main import "C" //export Add func Add(a, b int) int { return a + b } func main() {}

這個 Add 函數將會接受兩個整數並返回它們的和。我們使用了 C 包中的 //export 註釋來將 Go 函數暴露給 C 語言,這樣它就能被 Android 調用。

步驟 2: 編譯為 Android 庫

使用 gomobile bind 命令將 Go 代碼編譯為 Android 庫:

bash

gomobile bind -target=android .

這會生成一個 .aar 文件,這個文件就是你可以在 Android Studio 中使用的庫。

步驟 3: 在 Android 中使用 Go 庫

  1. .aar 文件集成到 Android Studio

    • 在 Android Studio 中,將生成的 .aar 文件放到 libs 目錄中,並在 build.gradle 中引用它:
    gradle

    dependencies { implementation files('libs/your-go-library.aar') }
  2. 在 Java 或 Kotlin 中調用 Go 函數: 你可以像調用其他 Java 函數一樣調用 Go 庫中的函數。以下是如何在 Kotlin 中調用 Go 的 Add 函數:

    kotlin

    import com.example.yourgolibrary.YourGoLibrary class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 使用 Go 库中的 Add 函数 val result = YourGoLibrary.add(3, 5) Log.d("GoResult", "The sum is: $result") } }

    在上面的代碼中,YourGoLibrary 是 Go 庫中自動生成的 Java 類,通過它可以調用 Go 的 Add 函數。

二、在 iOS 中調用 Go 撰寫的庫

步驟 1: 編寫 Go 代碼

假設你仍然使用上面的 Go 代碼,這個代碼可以被暴露給 iOS 調用。

go

package main import "C" //export Add func Add(a, b int) int { return a + b } func main() {}

步驟 2: 編譯為 iOS 庫

使用 gomobile bind 命令將 Go 代碼編譯為 iOS 库:

bash

gomobile bind -target=ios .

這會生成一個 .framework 文件,你可以在 Xcode 中使用它。

步驟 3: 在 iOS 中使用 Go 庫

  1. .framework 文件集成到 Xcode 項目中

    • 在 Xcode 中,將生成的 .framework 文件拖到 Xcode 項目的 Frameworks 目錄下。
    • 在 Xcode 中的「Build Settings」中設置 FRAMEWORK_SEARCH_PATHS,指向 .framework 的路徑。
  2. 在 Swift 或 Objective-C 中調用 Go 函數: 在 Swift 中,你可以像調用其他 Objective-C 類似調用 Go 的方法。以下是如何在 Swift 中調用 Go 的 Add 函數:

    swift

    import UIKit import YourGoLibrary class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 使用 Go 库中的 Add 函数 let result = YourGoLibrary.add(3, 5) print("The sum is: \(result)") } }

    在上面的代碼中,YourGoLibrary 是由 gomobile 生成的 Swift 類,通過它可以調用 Go 的 Add 函數。

三、注意事項

  1. 性能考慮:Go 語言在與原生代碼交互時可能會有一些性能開銷,特別是涉及到數據傳輸或複雜的調用。
  2. 錯誤處理:Go 中的錯誤處理(error)需要特別處理,因為 Go 和 Java/Objective-C 的錯誤處理機制不同。在 Go 中,錯誤通常通過返回值來處理,因此在調用 Go 函數時需要注意錯誤的傳遞和處理。
  3. 跨平台問題:Go 和原生代碼之間的接口需要通過 C 語言調用,因此一些平台特定的細節(如內存管理、異常處理等)可能需要特別處理。

總結

通過 gomobile 工具,您可以將 Go 語言編寫的邏輯作為原生庫集成到 Android 和 iOS 應用中。在 Android 中,生成 .aar 文件並使用 Java 或 Kotlin 調用;在 iOS 中,生成 .framework 文件並使用 Swift 或 Objective-C 調用 Go 函數。這樣可以讓您在移動應用中利用 Go 語言的性能優勢和高效處理能力。

留言

這個網誌中的熱門文章

[Kotlin]如何學習Kotlin

[golang]如何使用 gorm 高效執行批量插入 (可以透過 Create()、CreateInBatches(),或者 原生 SQL 語句 來提升效率)

[Kotlin]Kotlin Multiplatform (KMP) 如何安裝使用和部署