package main import "fmt" type path string func Save(p path) string { return "Saved" } func main() { var p path p = "/tmp/xxx" fmt.Println(Save(p)) // OK s := "/tmp/xxx" fmt.Println(Save(s)) // Compile Error fmt.Println(Save("/tmp/xxx")) // OK }
GoのtypeはSwiftと若干違うなと思ったことがあって、Goは2つ目のコードをコンパイルエラーにしてくれて、「おっ」と思ったけどリテラルを渡すことは防止できなかった。import Foundation typealias Path = String func save(path: Path) -> String { return "Saved" } var p: Path = "/tmp/xxx" print(save(path: p)) var s: String = "/tmp/xxx" print(save(path: s)) print(save(path: "/tmp/xxx"))
Swiftは全部通るはず。