使用 Gomobile 建立 iOS 函式庫
前言
心之所至,隨意亂寫。
這篇就是想隨手記下:如果有個簡單的 greeting 功能想拿到 iOS 用,用 Gomobile 該怎麼做。於是乎這篇就誕生啦。
一直想找個方式,讓 Go 寫的邏輯可以直接在 Swift 裡面用上。最近剛好看到 Gomobile 這個工具,就想試試看。
今天,就以一個非常簡單的 greeting
為例,來示範整個流程。
主要內容
環境需求
以下條件,上你的開發環境該是具備了:
- macOS(畢竟 iOS 編譯得在 mac 上)
- Xcode(一切 iOS 專案與模擬器的主戰工具)
- Go ≥ 1.18
- Git(以防你想版本控制一下)
安裝 Gomobile
1go install golang.org/x/mobile/cmd/gomobile@latest
2gomobile init
就是這麼簡單,下一步就可以撰寫 Go 程式碼並 bind 了。
Go 程式碼:建立一個簡單的 greeting
package
1// greeting/greeting.go
2package greeting
3
4import "fmt"
5
6func Hello(name string) string {
7 return fmt.Sprintf("Hello, %s!", name)
8}
9
10func Welcome(name string) string {
11 return fmt.Sprintf("Welcome to Go Mobile, %s!", name)
12}
這個 package 用的都是 Gomobile 支援的基本型別(string),非常 straightforward。
編譯 iOS xcframework
回到 terminal,在專案根目錄執行:
1gomobile bind -target=ios -o ./libs/Greeting.xcframework ./greeting
如此一來,你就拿到了 Greeting.xcframework
,可以往下整合啦。
Xcode 專案整合流程
- 用 Xcode 創建一個 Swift 的 iOS app。
- 在 Xcode project 裡新增一個
frameworks
group。 - 把
Greeting.xcframework
拖進去,記得選「Copy items if needed」並打勾你的 app target。 - 確認在 Project 的
General → Frameworks, Libraries, and Embedded Content
裡看得到這個 framework。
在 Swift 中呼叫 Go 函數
在 ViewController.swift
裡這樣寫:
1import UIKit
2import Greeting
3
4class ViewController: UIViewController {
5 override func viewDidLoad() {
6 super.viewDidLoad()
7
8 let hello = GreetingHello("Alice")
9 let welcome = GreetingWelcome("Alice")
10
11 print(hello) // Hello, Alice!
12 print(welcome) // Welcome to Go Mobile, Alice!
13 }
14}
就這樣,用 Swift 呼叫 Go 寫的函數,真的沒什麼難度。
測試與小提醒
- 在 Xcode 裡按下
Cmd+B
編譯看看,有沒有報錯。 - 執行模擬器,觀察 console 輸出是否符合預期。
常見狀況:
- No such module:先確認
xcframework
是否確實加入;或試試 Clean Build Folder,再重跑。 - Runtime 錯誤:通常是參數型別 mismatch,或傳錯東西給 Go。
小結
這樣就完成了一個最基本的流程:用 Gomobile 把 Go 的 greeting 函式帶到 iOS 上。對於想把共用邏輯(像算法、工具函數等)放在 Go,然後在不同平台重用的需求,這流程其實還滿實用的耶。雖然 Gomobile 限制的確存在,但對輕量功能來說,超方便的。