ข้ามไปยังเนื้อหา

Functions

ฟังก์ชันใน TypeScript มีความยืดหยุ่นสูง — arrow function, default params, rest params, การคืนค่าแบบ tuple ฟังก์ชันใน Go ชัดเจนกว่าแต่ก็ทรงพลังพอกัน สิ่งที่นักพัฒนา TypeScript จะแปลกใจมากที่สุดคือ ฟังก์ชันใน Go คืนค่าได้หลายค่าโดยตรง โดยไม่ต้องห่อเป็น tuple หรือ array

TypeScript
function add(a: number, b: number): number {
return a + b;
}
// Arrow function
const greet = (name: string): string => {
return `Hello, ${name}!`;
};
Go
func add(a int, b int) int {
return a + b
}
// No arrow functions — just func
func greet(name string) string {
return "Hello, " + name + "!"
}

ใน TypeScript การคืนค่าสองอย่างหมายถึงต้องใช้ tuple หรือ object แต่ใน Go การคืนค่าหลายค่าเป็นฟีเจอร์ระดับ first-class ที่ใช้กันทุกที่ — โดยเฉพาะการคืนผลลัพธ์พร้อมกับ error

TypeScript
// TypeScript: tuple or object
function divide(a: number, b: number): [number, Error | null] {
if (b === 0) return [0, new Error("division by zero")];
return [a / b, null];
}
const [result, err] = divide(10, 2);
Go
// Go: multiple return values
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("division by zero")
}
return a / b, nil
}
result, err := divide(10, 2)

variadic ของ Go ทำงานเหมือน rest parameter ของ TypeScript เป๊ะ ๆ ใช้ ...T ในรายการ parameter แล้วข้างในฟังก์ชันจะได้ค่าออกมาเป็น slice

TypeScript
function sum(...nums: number[]): number {
return nums.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3, 4);
Go
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
sum(1, 2, 3, 4)
package main
import (
"errors"
"fmt"
)
func add(a, b int) int {
return a + b
}
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println(add(3, 4))
result, err := divide(10, 3)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Printf("10 / 3 = %.4f\n", result)
}
fmt.Println(sum(1, 2, 3, 4, 5))
}
Go จัดการการคืนค่าหลายค่าจากฟังก์ชันอย่างไร?
ไวยากรณ์ใดที่ใช้ประกาศ variadic parameter ใน Go?
ใน Go คีย์เวิร์ดใดที่ใช้กำหนดฟังก์ชัน?
คุณใช้การประกาศแบบสั้น := ได้เมื่อไหร่?