9.3 Go语言入门(变量声明和函数调用)

Go语言入门(变量声明和函数调用)

  • 目录
    • 二、变量声明和函数调用
      • 1. 变量声明
        • 1.1 使用 var 关键字声明
        • 1.2 简短声明
        • 1.3 零值
        • 1.4 常量
      • 2. 函数调用
        • 2.1 函数定义
        • 2.2 多个返回值
        • 2.3 命名返回值
        • 2.4 可变参数
        • 2.5 匿名函数和闭包

目录

Go 语言(Golang)是一种静态类型、编译型语言,由 Google 开发,专注于简洁性、并发和高效性。

下面是 Go 语言的基础语法讲解和代码示例。


上一篇:一、Go语言入门(包和导入)


二、变量声明和函数调用

在 Go 语言中,变量声明和函数定义是基础语法的重要部分。下面将详细讲解变量声明和函数定义,并提供代码示例。

1. 变量声明

1.1 使用 var 关键字声明

使用 var 关键字可以显式声明变量,并指定类型。也可以在声明时进行初始化。

package main

import "fmt"

func main() {
    // 声明一个字符串变量并初始化
    var name string = "Alice"
    fmt.Println(name)

    // 声明一个整型变量,未初始化时会使用零值
    var age int
    fmt.Println(age) // 默认值 0

    // 同时声明多个变量
    var width, height int = 100, 200
    fmt.Println(width, height)

    // 类型推断
    var country = "USA"
    fmt.Println(country)

    // 声明布尔变量
    var isActive bool = true
    fmt.Println(isActive)
}

1.2 简短声明

使用 := 进行简短声明,类型由右值推断。这种方法只能在函数内部使用。

package main

import "fmt"

func main() {
    // 简短声明变量
    name := "Bob"
    age := 30
    fmt.Println(name, age)

    // 同时声明多个变量
    x, y := 10, 20
    fmt.Println(x, y)

    // 声明布尔变量
    isActive := false
    fmt.Println(isActive)
}

1.3 零值

未初始化的变量会被赋予默认的零值:

  1. 数字类型(包括 int, float64):0
  2. 布尔类型:false
  3. 字符串类型:“”(空字符串)
  4. 指针、切片、映射、通道、函数和接口:nil
package main

import "fmt"

func main() {
    var a int
    var b float64
    var c bool
    var d string
    var e []int

    fmt.Println(a) // 0
    fmt.Println(b) // 0
    fmt.Println(c) // false
    fmt.Println(d) // ""
    fmt.Println(e) // []
}

1.4 常量

使用 const 关键字声明常量,常量在编译时确定,并且不可修改。

package main

import "fmt"

const Pi = 3.14

func main() {
    const Greeting = "Hello, World!"
    fmt.Println(Pi)
    fmt.Println(Greeting)
}

2. 函数调用

2.1 函数定义

Go 中的函数定义包括函数名、参数列表、返回值列表和函数体。

package main

import "fmt"

// 定义一个函数,接受两个 int 参数,返回它们的和
func add(x int, y int) int {
    return x + y
}

func main() {
    sum := add(3, 4)
    fmt.Println("Sum:", sum)
}

2.2 多个返回值

Go 的函数可以返回多个值。

package main

import "fmt"

// 交换两个字符串
func swap(a, b string) (string, string) {
    return b, a
}

func main() {
    x, y := swap("hello", "world")
    fmt.Println(x, y) // 输出:world hello
}

2.3 命名返回值

返回值可以在函数定义中命名,命名返回值在函数体中被初始化为对应类型的零值。return 语句可以返回这些值。

package main

import "fmt"

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return // 省略返回变量名,返回 x, y
}

func main() {
    fmt.Println(split(17)) // 输出:7 10
}

2.4 可变参数

使用 表示可变参数。

package main

import "fmt"

func sum(numbers ...int) int {
    total := 0
    for _, num := range numbers {
        total += num
    }
    return total
}

func main() {
    fmt.Println(sum(1, 2, 3))       // 输出:6
    fmt.Println(sum(4, 5, 6, 7, 8)) // 输出:30
}

2.5 匿名函数和闭包

匿名函数和闭包在 Go 中也很常见。

package main

import "fmt"

func main() {
    // 匿名函数
    add := func(x, y int) int {
        return x + y
    }
    fmt.Println(add(3, 4)) // 输出:7

    // 闭包
    counter := func() func() int {
        i := 0
        return func() int {
            i++
            return i
        }
    }()
    
    fmt.Println(counter()) // 输出:1
    fmt.Println(counter()) // 输出:2
    fmt.Println(counter()) // 输出:3
}

通过理解变量声明和函数定义,可以掌握 Go 语言的基础语法,并有效编写和组织代码。


下一篇:三、Go语言入门(运算符)


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

按月爬取天气数据可视化展示

从天气网分析,可以查询每个月的天气情况,这里按照url规则,传入年月,获取数据,最后进行可视化展示,最终效果: 下面是获取过程: 第一步: import requestsdef get_weather(month):url = f"https://lishi.tianqi.com/nanning/{month}.html"response = reques…

最新:windows下安装pcl点云库

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

日志的介绍及简单实现

个人主页:Lei宝啊 愿所有美好如期而遇 目录 日志是什么? 为什么需要日志? 实现一个简单日志 时间戳 clock_gettime time & localtime 可变模板参数(使用C语言),va_start & va_end & vsprintf 宏 __LINE__…

Anaconda+CUDA+CUDNN+Pycharm+Pytorch安装教程(第一节 Anconda安装)

1.选择和对应的anconda版本 官网地址:Index of / (anaconda.com) 下载地址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装流程 (1)下载安装包 (2)点击next (3)点击I agree &a…

跨域计算芯片,一把被忽视的汽车降本尖刀

作者 |王博 编辑 |德新 2019年前后,「中央运算单元区域控制」的架构被提出。基于这一趋势,从板级的多芯片,到板级的单芯片,集成度越来越高,跨域计算芯片随之来到聚光灯下。 跨域计算芯片的特点是,与专为智…

[CISCN2024]-PWN:gostack解析(go语言程序,syscall)

查看保护 ida比较复杂,建议动调配合静态分析程序运行 这里函数返回不用leave和ret,而是利用add rsp和ret,所以要动调查看到底要覆盖哪里。 完整exp: from pwn import* pprocess(./gostack) syscall0x4616c9 pop_rax0x40f984 po…

THREE.JS中的向量点乘,以及他的几何意义。

1. THREE.JS中的向量点乘,以及他的几何意义 向量点乘的公式 : 2. 在three.js 中计算向量点乘 const a new THREE.Vector3(10, 10, 0); const b new THREE.Vector3(20, 0, 0); const dot a.dot(b);从这里可以看出,向量的点乘的结果是一个数字(标量…

【调和级数】100321. 优质数对的总数 II

本文涉及知识点 调和级数 质数、最大公约数、菲蜀定理 LeetCode100321. 优质数对的总数 II 给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对&#…

【机器学习数据可视化-07】波士顿房价预测数据分析

波士顿房价预测:基于数据可视化的深入探索 一、引言   在当今社会,房地产市场作为经济的重要支柱之一,其走势与波动直接影响着国家经济的稳定和人民生活的品质。波士顿,这座历史悠久且充满活力的城市,其房地产市场一…

AtCoder Regular Contest 178 A~D

A.Good Permutation 2(贪心) 题意: 给你一个正整数 N N N和一个由 M M M个正整数 A ( A 1 , A 2 , … , A M ) A(A_{1},A_{2}, \dots,A_{M}) A(A1​,A2​,…,AM​)组成的序列。 在这里, A A A的所有元素都是介于 1 1 1和 N N …

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上,我们总是对各种护肤成分充满好奇。今天,就让我们一起探讨一个热门话题——胶原蛋白三肽,它究竟能否深入我们的皮肤,为我们带来期待中的美丽改变呢? 首先,我们需要了解胶原蛋白肽是什么…

【编译原理复习笔记】中间语言

中间语言 中间语言的特点和作用 (1)独立于机器 (2)复杂性介于源语言和目标语言之间 中间语言可以使编译程序的结构在逻辑上更为简单明确 常用的中间语言 后缀式 图表示:抽象语法树,有向无环图 三地址代…

css卡片翻转 父元素翻转子元素不翻转效果

css卡片翻转 父元素翻转子元素不翻转效果 vue <div class"moduleBox"><div class"headTitle"><span class"headName">大额案例</span></div><div class"moduleItem"><span class"module…

时间(空间)复杂度(结构篇)

目录 前言&#xff1a; 一、时间复杂度 1.1 时间复杂度的定义 1.2 时间复杂度的分析 表示方法&#xff1a; 1.3 常见的时间复杂度 1.4 时间复杂度的计算以及简单的分析 冒泡排序 折半查找&#xff08;二分查找&#xff09; 斐波那契数列&#xff08;递归&#xff09…

手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享

背景&#xff1a;书接上回&#xff0c;一站式安装Ubuntu及配置服务器手把手教学&#xff0c;一站式安装ubuntu及配置服务器-CSDN博客 在安装及配置好服务器后&#xff0c;因为课题组可能涉及多个用户共用一台服务器&#xff0c;为了防止服务器上代码误删和Anaconda环境管理混乱…

爽!AI手绘变插画,接单赚爆了!

我最近发现一款名叫Hyper-SD15-Scribble的AI项目&#xff0c;可以实现一键手绘变插画的功能&#xff0c;而且它搭载了字节出品的超快速生成图片的AI大模型Hyper-SD15&#xff0c;可以实现几乎实时生成图片&#xff0c;有了它&#xff0c;拿去接一些手绘商单分分钟出图&#xff…

安卓手机电脑平板均支持

最近随着人工智能的火热&#xff0c;越来越多人问我怎么设置&#xff0c;我这边主要提供简单的配置&#xff0c;能够实现想要的功能&#xff0c;不懂得的友友们可以私聊我&#xff0c;

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…