這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Golang的函數 @ Ruby的方法
不得不說在Ruby裡面定義一個方法實在是過於簡單,以至於在學習其他語言的時候會被各種類型限制所困擾
ruby定義一個方法
def hello "hello!"end
參數
def plus x, y x + yend plus 1,2=> 3
在沒有return關鍵字的時候,會預設返回最後一行,如果方法內沒有任何東西,會返回nil
預設參數,當方法被調用的時候沒有傳參數的時候,不會因為沒有參數而報錯
def plus x=1, y=2 x + yendplus=> 3
多值返回
def plus x,y return y,xenda,b = plus(1, 2)=> [2,1]a=> 2b => 1
在Ruby裡面定義方法,總之就是舒服,不需要考慮參數的類型和傳回值的類型
但是在Go裡面就沒有這麼自由了
package mainimport "fmt"func plus(x int, y int) int { return x + y}func main() { fmt.Println(add(1, 2))}
你必須指定好,你的每一個參數是什麼類型的,返回的值是什麼類型的,上面plus方法中,接受兩個參數x和y,他們都是int類型的,並且函數最終會返回一個int類型的結果,如果你傳了一個其他類型的參數進去,或者你的方法沒有最終沒有返回規定的類型,編譯的時候都會報錯
plus函數的兩個參數都是整數型,因此也可以這樣寫
func plus(x, y int) int { return x + y}
多值返回的時候,也需要為每一個返回的值規定好類型
package mainimport "fmt"func swap(x, y string) (string, string) { return y, x}func main() { a, b := swap("hello", "world") fmt.Println(a, b)}
命名傳回值
package mainimport "fmt"func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return}func main() { fmt.Println(split(17))}
Go 的傳回值可以被命名,並且像變數那樣使用。
沒有參數的 return 語句返回結果的當前值。也就是直接返回。
直接返回語句僅應當用在像下面這樣的短函數中。在長的函數中它們會影響代碼的可讀性。