Latest 1.1.0
License Attribution License
Platforms ios 8.0, osx 10.9, requires ARC

 GoSwift – Go Goodies for Swift

Bring some of the more powerful features of Go to your iOS / Swift project such as channels, goroutines, and defers.

This is an experimental project. For production use of channels and sync APIs, check out the Safe project.

Built for Swift 2.0 – For Swift 1.2 support use v0.1.4 or earlier.


  • Goroutines
  • Defer
  • Panic, Recover
  • Channels
    • Buffered Channels
    • Select, Case, Default
    • Closing
  • Sync Package
    • Mutex, Cond, Once, WaitGroup


Note that the following example and all of the examples in the examples directory originated from and Mark McGranaghan


package main

import "fmt"

func main() {
    jobs := make(chan int, 5)
    done := make(chan bool)

    go func() {
        for {
            j, more := <-jobs
            if more {
                fmt.Println("received job", j)
            } else {
                fmt.Println("received all jobs")
                done <- true

    for j := 1; j <= 3; j++ {
        jobs <- j
        fmt.Println("sent job", j)
    fmt.Println("sent all jobs")



func main() {
    var jobs = Chan<Int>(5)
    var done = Chan<Bool>()

    go {
        for ;; {
            var (j, more) = <?jobs
            if more {
                println("received job (j!)")
            } else {
                println("received all jobs")
                done <- true

    for var j = 1; j <= 3; j++ {
        jobs <- j
        println("sent job (j)")
    println("sent all jobs")


Run an Example

Each example has a .swift and .go file that contain the same logic.

./ examples/goroutines.swift
./ examples/goroutines.go

Installation (iOS and OS X)


Add the following to your Cartfile:

github "tidwall/GoSwift"

Then run carthage update.

Follow the current instructions in Carthage’s README
for up to date installation instructions.

The import GoSwift directive is required in order to access GoSwift features.


Add the following to your Podfile:

pod 'GoSwift'

Then run pod install with CocoaPods 0.36 or newer.

The import GoSwift directive is required in order to access GoSwift features.


Copy the GoSwiftgo.swift file into your project.

There is no need for import GoSwift when manually installing.


Josh Baker @tidwall


The GoSwift source code available under the MIT License.

The Go source code in the examples directory is copyright Mark McGranaghan and licensed under a
Creative Commons Attribution 3.0 Unported License.

The Swift version of the example code is by Josh Baker

Latest podspec

    "name": "GoSwift",
    "version": "1.1.0",
    "summary": "Go Goodies for Swift. Including goroutines, channels, defer, and panic.",
    "homepage": "",
    "license": {
        "type": "Attribution License",
        "file": "LICENSE"
    "source": {
        "git": "",
        "tag": "v1.1.0"
    "authors": {
        "Josh Baker": "[email protected]"
    "social_media_url": "",
    "platforms": {
        "ios": "8.0",
        "osx": "10.9"
    "source_files": "GoSwift/go.swift",
    "requires_arc": true

Pin It on Pinterest

Share This