当前位置:首页 > 技术知识 > 正文内容

golang编程实练-函数(func)_golang编程语言

maynowei5个月前 (10-02)技术知识60

main.go:

package main

import (
    "fmt"
    "time"
)

// 函数:有多个输入参数,一个输出参数
func add(a int, b int) int {
    return a + b
}

// 函数:输入参数为空,输出参数为空
func Print() {
    println("hello world")
}

// 函数:输入参数为空,有输出参数
func Format(t *time.Time) string {
    return t.Format("2006-01-02 15:04:05")
}

// 函数:从函数体中返回一个指针对象
func Now() *time.Time {
    now := time.Now()
    return &now
}

type Person struct{}

// 类的成员函数: 指针接收器
func (p *Person) Run() {
    println("do something...")
}

// 类的成员函数: 值接收器
func (p Person) Run2() {
    println("do something...")
}

// 函数:结构体值参数
func RunPerson(p Person) {
    p.Run()
}

// 函数:结构体指针参数
func RunPerson2(p *Person) {
    p.Run()
}

type Runner interface {
    Run() // 接口方法申明
}

// 泛型函数
func MyFunc[T Runner](x T) {
    x.Run()
}

// 函数:多返回值
func f2() (int, int) {
    return 1, 2
}

// 函数:函数作为入参
func f3(f func()) {
    f()
}

// 函数:函数作为返回值
func f4() func() bool {
    return func() bool {
        return true
    }
}

// 通常使用最后一个输出参数返回error
func f5(i int) error {
	if i < 0 {
		return errors.New("invalid i")
	}
	return nil
}

// 通常使用最后一个输出参数返回error
func f6(i int) (int, error) {
	if i < 0 {
		return 0, errors.New("invalid i")
	}
	return 10, nil
}

// 递归函数
func factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * factorial(n-1)
}

// 主函数
func main() {
    // 闭包函数的定义与使用
    f := func(i int) {
        println("i:", i)
    }
    f(10)

    // 函数:多返回值调用
    i1, _ := f2()
    fmt.Printf("i1:%v\n", i1)

    println("done.")
}

说明:

  1. golang中使用func定义函数,函数可以有0或者多个入参,也可以有0或者多个输出参数
  2. 函数名的首字母大写代表public,其他代表package(包可见性)
  3. golang中函数参数没有默认值,没有命名参数,python和仓颉等语言有。
  4. golang中函数可以返回类似元组的多值,这一点挺好的。/通常会使用最后一个输出参数返回error,这是一种编码范式吧
  5. 因为golang是支持GC的,所以可以从一个函数体中返回一个变量指针,该变量对应的数据在不再使用后,会被GC自动回收
  6. golang中函数作为一种数据类型,本身可以被变量定义,被参数传递。函数类型是引用类型。
  7. golang支持闭包(匿名函数),同样的匿名函数可以被当作变量做参数传递
  8. 类的成员函数,可以使用指针接收器,也可以使用值接收器。
  9. 函数支持泛型处理
  10. main是一个应用的主入口函数.

相关文章

Axure原型:化妆镜商城Web高保真原型+线框图

之前给大家分享了化妆镜商城APP高保真原型,继续给大家补充该原型的Web版。也顺便分享一个化妆镜商城web版的线框图。关于线框图的绘制几乎都是经验的总结,开始时建议大家用铅笔白纸绘制,初版概念确定后再...

大势所趋:Swift受欢迎度即将赶超Objective C

Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序。不到两年时间,在iOS开发者中Swift语言便凭借着简洁的语法和优秀的特性打动了开发者,之前用于iOS和...

Android主流UI开源库整理(android完整开源项目)

前言最近老大让我整理一份 Android主流UI开源库 的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

centos系统安装oracle简易客户端instantclient

一、目录1:centos 环境准备2:instant client 下载3:instant client 安装4:instant client 配置5:测试连接二、安装步骤1:zip,unzip命令安...

python-oracledb——利用python连接Oracle数据库的好用方法

这篇文章最早发布在CSDN了,最近想尝试使用一下头条,重新转移过来了。背景介绍之前使用的数据库一直是MySql,偶尔使用PostgreSQL,都是利用的数据库连接池使用;最近需要在Oracle数据库取...

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里。也...