初试

每个 Go 程序都是由包组成的。

程序运行的入口是包 `main`。

这个程序使用并导入了包 "fmt" 和 `"math/rand"`。

按照惯例,包名与导入路径的最后一个目录一致。例如,`"math/rand"` 包由 package rand 语句开始。

注意: 这个程序的运行环境是固定的,因此 rand.Intn 总是会返回相同的数字。 (为了得到不同的数字,需要生成不同的种子数,参阅 rand.Seed。)

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. const (
  6. Big = <<
  7. Small = Big >>
  8. )
  9.  
  10. func needInt(x int) int {
  11. return x* +
  12. }
  13.  
  14. func needFloat(x float64) float64 {
  15. return x * 0.1
  16. }
  17.  
  18. func main() {
  19. fmt.Println(needInt(Small))
  20. fmt.Println(needFloat(Small))
  21. fmt.Println(needFloat(Big))
  22. }

demo

导入

这个代码用圆括号组合了导入,这是“打包”导入语句。

同样可以编写多个导入语句,例如:

  1. import "fmt"
  2. import "math"

不过使用打包的导入语句是更好的形式。

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8. func main() {
  9. fmt.Println(math.pi)
  10. }
  11.  
  12. DEMO

demo

导出名

在导入了一个包之后,就可以用其导出的名称来调用它。

在 Go 中,首字母大写的名称是被导出的。

Foo 和 FOO 都是被导出的名称。名称 foo 是不会被导出的。

执行代码。然后将 math.pi 改名为 math.Pi 再试着执行一下。

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8. func main() {
  9. fmt.Println(math.pi)
  10. }
  11.  
  12. DEMO

demo

函数

初试

函数可以没有参数或接受多个参数。

在这个例子中,`add` 接受两个 int 类型的参数。

注意类型在变量名 _之后_。

 DEMO

当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。

在上个例子中:

  1. x int, y int

可缩写为:

  1. x, y int
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func add(x, y int) int {
  6. return x + y
  7. }
  8.  
  9. func main() {
  10. fmt.Println(add(, ))
  11. }

DEMO

多值返回

函数可以返回任意数量的返回值。

swap 函数返回了两个字符串。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func swap(x, y string) (string, string) {
  6. return y, x
  7. }
  8.  
  9. func main() {
  10. a, b := swap("hello", "world")
  11. fmt.Println(a, b)
  12. }

DEMO

命名返回值

Go 的返回值可以被命名,并且像变量那样使用。

返回值的名称应当具有一定的意义,可以作为文档使用。

没有参数的 return 语句返回结果的当前值。也就是`直接`返回。

直接返回语句仅应当用在像下面这样的短函数中。在长的函数中它们会影响代码的可读性。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func split(sum int) (x, y int) {
  6. x = sum * /
  7. y = sum - x
  8. return
  9. }
  10.  
  11. func main() {
  12. fmt.Println(split())
  13. }

demo

变量

初始化变量

var 语句定义了一个变量的列表;跟函数的参数列表一样,类型在后面。

就像在这个例子中看到的一样,`var` 语句可以定义在包或函数级别。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. var c, python, java bool
  6.  
  7. func main() {
  8. var i int
  9. fmt.Println(i, c, python, java)
  10. }
  11.  
  12. DEMO

demo

变量定义可以包含初始值,每个变量对应一个。

如果初始化是使用表达式,则可以省略类型;变量从初始值中获得类型。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. var i, j int = ,
  6.  
  7. func main() {
  8. var c, python, java = true, false, "no!"
  9. fmt.Println(i, j, c, python, java)
  10. }
  11.  
  12. DEMO

demo

短声明变量

在函数中,`:=` 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。

函数外的每个语句都必须以关键字开始(`var`、`func`、等等),`:=` 结构不能使用在函数外。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var i, j int = ,
  7. k :=
  8. c, python, java := true, false, "no!"
  9.  
  10. fmt.Println(i, j, k, c, python, java)
  11. }
  12.  
  13. DEMO

demo

常量

定义

常量的定义与变量类似,只不过使用 const 关键字。

常量可以是字符、字符串、布尔或数字类型的值。

常量不能使用 := 语法定义。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. const Pi = 3.14
  6.  
  7. func main() {
  8. const World = "世界"
  9. fmt.Println("Hello", World)
  10. fmt.Println("Happy", Pi, "Day")
  11.  
  12. const Truth = true
  13. fmt.Println("Go rules?", Truth)
  14. }
  15.  
  16. DEMO

demo

数值常量

数值常量是高精度的 _值_。

一个未指定类型的常量由上下文来决定其类型。

也尝试一下输出 needInt(Big) 吧。

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. const (
  6. Big = <<
  7. Small = Big >>
  8. )
  9.  
  10. func needInt(x int) int {
  11. return x* +
  12. }
  13.  
  14. func needFloat(x float64) float64 {
  15. return x * 0.1
  16. }
  17.  
  18. func main() {
  19. fmt.Println(needInt(Small))
  20. fmt.Println(needFloat(Small))
  21. fmt.Println(needFloat(Big))
  22. }

demo

go 【第二篇】包、变量、函数的更多相关文章

  1. SSIS 数据类型 第二篇:变量的数据类型

    变量(Variable)用于存储在Package运行时用到的值,集成服务支持两种类型的变量:用户自定义的变量和系统变量,自定义的变量由用户来定义,系统变量由集成服务来定义. 变量的用途十分广泛,用于容 ...

  2. 第二篇.1、python基础之数据类型与变量

    一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...

  3. 深入理解javascript函数系列第二篇——函数参数

    × 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...

  4. javascript立即调用的函数表达式N种写法(第二篇)

    原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...

  5. [dart学习]第二篇:dart变量介绍 (一)

    前言 本文的所有内容均是官方文档的简单翻译和理解,需要查看原文,请登录  https://www.dartlang.org/guides/language/language-tour  阅读, 让我们 ...

  6. Go 入门 - 包,函数和变量

    主要内容来自中文版的官方教程Go语言之旅 目的为总结要点 包,函数和变量 包 import 语法,多个用括号换行扩起,包之间不需要间隔符,用引号引起 import ( "fmt" ...

  7. 第二篇 界面开发 (Android学习笔记)

    第二篇 界面开发 第5章 探索界面UI元素 ●The Android View Class     ●△Widget设计步骤 需要修改三个XML,以及一个class: 1)第一个xml是布局XML文件 ...

  8. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  9. 【OpenGL】第二篇 Hello OpenGL

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. python从开始到放弃的途中一直很菜的day13

    一直很菜的今天又来了两个新的概念,一个是装饰器,一个是推导式,装饰器好比女生出门前需要化妆的准备,推导式也称为生成式.先说装饰器吧,装饰器其实本质也是一个函数,并用@+函数名装饰到其他函数上,当这个其 ...

  2. centos6.5搭建hadoop完整教程

    https://blog.csdn.net/hanzl1/article/details/79040380 博客地址http://blog.csdn.net/pucao_cug/article/det ...

  3. ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库

    字符集为ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库  相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到 ...

  4. 使用fiddler模拟控制网速,实现网速慢。(丢包如何模拟)

    参考连接 https://blog.csdn.net/baidu_zhongce/article/details/46683323 参考连接2 https://www.jianshu.com/p/b9 ...

  5. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  6. Java 7 和 Java 8 中的 HashMap原理解析

    HashMap 可能是面试的时候必问的题目了,面试官为什么都偏爱拿这个问应聘者?因为 HashMap 它的设计结构和原理比较有意思,它既可以考初学者对 Java 集合的了解又可以深度的发现应聘者的数据 ...

  7. 记录一下不能使用let时如何创建局部变量(使用立即执行函数)

    记录一下阮老师提及的立即执行函数模拟let(以前根本没想到可以这样做啊!) // IIFE 写法 (function () { var tmp = ...; ... }()); // 块级作用域写法 ...

  8. python open 函数的读写追加

  9. Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用(转)

    原文地址:https://www.cnblogs.com/fashflying/p/6908028.html 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对 ...

  10. java.util.NoSuchElementException错误原因及解决方案

    1.原因:没有控制语句导致的迭代器的越界,使得map中的数据无法传入reduce,从而无法把结果传入目标文件中. 在进行Mapreduce实例——WordCount实验时遇到的错误,开始以为是lib包 ...