Go 入门系列之基础篇二

本文是Go语言入门系列的基础篇二,主要讲解了Go中的函数、闭包、指针和结构体四个核心概念。函数支持可变长参数,闭包则允许使用匿名函数并隐藏变量。指针在Go中用于按引用传递值和数据结构,而结构体是组织相关数据类型的集合。
摘要由CSDN通过智能技术生成

Go 入门系列

基础篇二

1. 函数

函数是 Go 的中心. (在其他一些语言中函数也是重中之重)

package main
import "fmt"
func main() {
	// 调用 add 函数
    res := add(3, 5)
    fmt.Println("3+5=", res)
    // 调用 add 函数, 使用 vals 函数的两个返回值作为参数
    fmt.Println("===", add(vals()))
    // 忽略第一个返回的参数
    _, c := vals()
    fmt.Println("c = ", c)
}
func add(a int, b int) int {
    return a + b
}
// 定义一个函数 返回两个值
func vals() (int, int) {
    return 3, 7
}

上述函数不仅仅可以返回多个值
Go 中函数允许 可变长参数

类比java 中的可变参数

func main() {
	sum(1, 2, 3)
    k := make([]int, 3)
    k[0] = 3
    k[1] = 4
    k[2] = 5
    // 传入一个 slice
    sum(k...)
}
// 可变参数函数 
func sum(nums ...int) {
	fmt.Println(nums, " ")
	total := 0
	for _, num := range nums {
		total += num
	}
	fmt.Println(total)
}

2. 闭包

Go 支持通过 闭包来使用 匿名函数.

通过闭包隐藏变量 i

package main
import "fmt"
func intSeq() func() int {
	i := 0
	return func() int {
		i += 1
		return i
	}
}
func main() {
	// nextInt 是一个函数
	nextInt := intSeq()
	// 调用这个函数 返回  ++i 的值
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())
	
}

3. 指针

Go 支持指针, 允许在程序中通过引用传递值 或数据结构

func zeroval(ival int) {
    ival  = 0
}
func zeroptr(iptr *int) {
    *iptr = 0
}

func main() {
    i := 1
    fmt.Println("init value:", i)
	// 值传递, 不影响 此处 i 的值
    zeroval(i)
    fmt.Println("zeroval:", i)
	// 将 i 的地址传递到 zeroptr 函数, 该函数就能修改 此处 i 的值为0
    zeroptr(&i)
    fmt.Println("zeroval:", i)
}

4. 结构体

type person struct {
    name string
    age int
}

func main() {
    fmt.Println(person{"Bob", 20})
    fmt.Println(person{name: "Alice", age: 20})

    s := person{name: "Tom", age: 33}
    fmt.Println(s.name, ":", s.age)
	// ptr 为 s 的指针, 指针也会被自动解引用.
    var ptr *person = &s
    fmt.Println(ptr.name)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值