go入门笔记五(init函数&方法、interface&闭包函数)

本文介绍了Go语言中`init`函数的使用,包括变量提升和多次初始化。同时,详细阐述了方法和函数的区别,特别是方法对于结构体的绑定及闭包函数的应用。还提及了空标识符在导入包时的作用以及接口与结构体的结合使用。
摘要由CSDN通过智能技术生成

// init函数常用的一个例子就是用来设置初始表达式的值。
// 变量放在函数下面,会提升到函数上面
// 可以有多个init()
// main里面不能init()


package main

import "fmt"

func init() {
	fmt.Println("init function --->", bb)
}
func init() { // 可以多个init
	fmt.Println("init22 function --->", aa)
}

var precomputed = [20]float64{}

func init() {
	var current float64 = 1
	precomputed[0] = current
	for i := 1; i < len(precomputed); i++ {
		precomputed[i] = precomputed[i-1] * 1.2
	}
	fmt.Println(precomputed)
}

var _ int64 = ss()
var aa int = bb
var bb int = 1

func ss() int64 {
	fmt.Println("111")
	aa = 3
	return 1
}

func main() {

	fmt.Println("main --->", aa)
}

二、Go要求非常严格,不允许引用不使用的包。但是有时你引用包只是为了调用init函数去做一些初始化工作。此时空标识符(也就是下划线)的作用就是为了解决这个问题。

import _ "image/png"

三、父子导入包的顺序
在这里插入图片描述

四、方法和函数

  • ⽅法是有接收者的,我们说的⽅法要么是属于⼀个结构体的,要么属于⼀个新定义的类型的。
    可以用:structname.funname()访问
type bird struct {
	name string
}

func (b bird) fly() { //多了形参,在函数名前面
	fmt.Println(b.name + " fly")
}
func (b *bird) fly2() {
	b.name = "duan"
	fmt.Println("b.name", b.name)
}
func main() {
	b := bird{"my bird"}
	// whatFly(b)
	b.fly()
	b.fly2()
	
}

interface和struct结合使用

package main

import "fmt"

type Animal interface {
	fly()
}
type bird struct {
	name string
}

func (b bird) fly() { //多了形参,在函数名前面
	fmt.Println(b.name + " fly")
}

func newAni() Animal {
	return &bird{name: "duan"}
}
func main() {
	var c Animal
	c = new(bird) //不能传参数
	c.fly()

	d := newAni()// 可以传参数
	d.fly()
}

  • 函数是指不属于任何结构体、类型的⽅法,也就是说函数是没有接收者的。
func add (a, b int ) int {
  // 函数
  return a+b

}
func (t *T) add (a, b int ) int {
  // 结构体
  return a+b

}

闭包函数

package main

import "fmt"

func getSequence() func() int {
	i := 0
	return func() int {
		i += 1
		return i
	}
}
func main() {
	num1 := getSequence()
	fmt.Println(num1())
	fmt.Println(num1())
	fmt.Println(num1())

	num2 := getSequence()
	fmt.Println(num2())
	fmt.Println(num2())
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值