HelloWorld

我们先看看一个最简单的HelloWorld代码

 package main

 import "fmt"

 func main() {
fmt.Println("Hello, World!")
}

这段代码可以在控制台输出 "Hello, World!"

下面让我们来刨析一下此段代码

第一行的 package main  定义了该程序的包名为 main ,main的功能同其它语言一样,都代表着程序的主要部分/入口,每一个应用都应该有一个main

第三行的  import "fmt"  代指引入fmt模块,fmt模块作用是输入输出,同学们可以暂且把他们看作Python的Print,要注意的是Go语言中禁止引入模块而不使用,这是为了保证代码的可读性和简洁性.

第五行开始 为构建一个名为main的函数,同Python类的main类似,当定义main后执行该模块会先执行main函数,当定义了init函数时会优先执行init初始化函数,Println函数也可以打印变量的值,此时不带引号.

# 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。  ---- 菜鸟教程

#  Go语言中的多行注释是 /* */  单行注释是 // 

Go语言中变量的定义使用

Go语言的建立变量如下

var sum int

分三个部分来读

新建变量  变量名  类型

注意变量名要规避Go语言的关键字(关键字以后会整理)

我们无法在函数外使用变量,会报错

syntax error: non-declaration statement outside function body
语法错误:函数主体之外的非声明语句

当我们在函数内使用变量则正确

 package main

 import "fmt"

 var sum int

 func main()  {
sum =
fmt.Println(sum)
}

导入包内的变量

每个Go项目都由多个包组成,当我们想要在A包中调用B包内的变量,首先要保证已经导入A,其次要保证要导入的变量第一个字母大写

我们引入math包,math.Pi是圆周率

package main

import (
"fmt"
"math"
) //var sum int func main() {
//sum = 1997
//fmt.Println(sum, rand.Intn(10))
fmt.Println(math.Pi)
}

可以正常打印,但是当我们改成小p,则会输出错误

cannot refer to unexported name math.pi
无法引用未导出的名称math.pi

函数的传参与返回

package main

import (
"fmt"
) func add(x int, y string) (int, string) {
return x, y
}
func main() {
fmt.Println(add(, "ad"))
}

我们来看这段代码,我们新建了一个函数为add,当我们需要传参时要指定参数的类型

(x int, y string) 代表可接受两个参数,x是int类型,y是str类型,如果我们接受的x,y都是一个类型可以简写为 (x, y int)

(int, string) 代表返回两个参数,第一个参数为int类型,第二个参数为str类型,返回时不可简写
我们也可以直接写return,这样会将所有函数内变量传出

package main

import "fmt"

func add(x, y int) (sum int) {
sum = x + y
return
} func main() {
fmt.Println(add(, ))
}

但是这样还是需要传出变量的名字,而且这样代码的可读性不是太好,所以我们不推荐这样使用

变量的定义

var语句可以同时将多个变量定义为一个类型

package main

import "fmt"

func add(x, y int) (sum int) {
sum = x + y
return
} var a, b, c bool func main() {
a = true
fmt.Println(a, b, c)
}

此时一个var语句定义了 a,b,c 三个变量,同时定义为bool值

又因为变量为空所以都是False

我们在main中又将a赋值为True

此时打印结果为

true false false

我们还可以在定义变量时赋予变量值

package main

import "fmt"

func add(x, y int) (sum int) {
sum = x + y
return
} var a, b, c bool = true, true, false func main() {
fmt.Println(a, b, c)
}

此时结果为

true true false

这种方式作用等同于

package main

import "fmt"

func add(x, y int) (sum int) {
sum = x + y
return
} var a=true
var b=false
var c=true func main() {
fmt.Println(a, b, c)
}

结果为

true false true

在函数内部我们可以不使用var定义变量,方法为

package main

import "fmt"

func main()  {
a :=
b := "ad"
fmt.Println(a, b)
}

结果为

 ad

 

Go语言从入门到放弃(一) 变量/常量/函数的更多相关文章

  1. php从入门到放弃系列-03.php函数和面向对象

    php从入门到放弃系列-03.php函数和面向对象 一.函数 php真正的威力源自它的函数,内置了1000个函数,可以参考PHP 参考手册. 自定义函数: function functionName( ...

  2. Go-数据类型以及变量,常量,函数,包的使用

    Go-数据类型以及变量,常量,函数,包的使用 一.数据类型 1.字符串类型 string -双引号包裹的:"xxx" -反引号包裹,可以换行, 注意: 区别于python,是没有单 ...

  3. GO语言从入门到放弃目录

    GO语言基础 第一个GO程序 GO语言常量和变量 GO语言数据类型 GO语言流程控制 GO语言数组 GO语言切片 GO语言 map GO语言函数 GO语言指针 Go语言接口 GO语言常用包 GO语言的 ...

  4. Go语言从入门到放弃(三) 布尔/数字/格式化输出

    本章主要介绍Go语言的数据类型 布尔(bool) 布尔指对或者错,也就是说bool只有两个值, True 或 False 两个类型相同的值可以使用比较运算符来得出一个布尔值 当两个值是完全相同的情况下 ...

  5. Go语言从入门到放弃(二) 优势/关键字

    本来这里是写数据类型的,但是规划了一下还是要一步步来,那么本篇就先介绍一下Go语言的 优势/关键字 吧 本章转载  <The Way to Go>一书 Go语言起源和发展 Go 语 言 起 ...

  6. Go语言从入门到放弃(设置 go get 为国内源)

    前言 Go语言学到 Gin 框架了, 其实每天学习是比较辛苦的事情, 坚持下去! 在使用 Go 过程中发现, 最无奈的是Go的一些模块下不下来, 即便挂了V, 油管2k不卡的那种, 依旧是 time ...

  7. Go语言从入门到放弃(四)

    前言 有段时间没摸Go语言了,最近B站的Go语言泄露挺火的. 还差的很远呐 学无止境 本章主要介绍一些零碎的小知识点 变更记录 # 19.4.30  起笔 # 19.4.30  增加代码打包步骤 正文 ...

  8. Go语言从入门到放弃(结构体常见的tag)

    什么是tag Tag是结构体中某个字段别名, 可以定义多个, 空格分隔 type Student struct {     Name string `ak:"av" bk:&quo ...

  9. python全栈开发从入门到放弃之装饰器函数

    什么是装饰器#1 开放封闭原则:对扩展是开放的,对修改是封闭的#2 装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象#3 目的:''' 在遵循 1. 不修改被装饰对象的源代码 2. ...

随机推荐

  1. SpringBoot入门笔记(一)、HelloWorld

    本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...

  2. jquery判断点击鼠标左、中、右键事件

    注:1为鼠标左键.2为鼠标中键.3为鼠标右键$('#btn').mousedown(function(e){           if(3 == e.which){                al ...

  3. 【51nod 1785】数据流中的算法

    Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度.   现有的统计工具只能统计某一个窗口中,用户的满意程 ...

  4. (14)CountTriplets

    一.问题描述 给定一个数组.三个索引 i,i ~ [0, array.length) j,  j ~ [0, array.length) k, k ~ [0, array.length) 求有多少种组 ...

  5. new和delete动态分配和撤销内存

    视频:C++引用及new和delete的使用 一.new用法 使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,动态分配失败,则返回 ...

  6. c++ virtual 记录

    虚继承: http://zh.wikipedia.org/wiki/%E8%99%9A%E7%BB%A7%E6%89%BF 解决了菱形继承问题 cB cC 继承cA    cD继承cB,cC    c ...

  7. struts基础3-把数据写入页面

    一.OGNL(Object-Groph Navigation Language) 是一种强大的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能. 1)与 ...

  8. 特性Attribute

    1.简介 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合.在学习如何建立我们自己的定制特性(custom attributes)之前,我们先来 ...

  9. java--GC Root有哪些

    GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收.方法区.JVM栈和Native栈不被GC所管理,因而选择这些非堆区的对象作为GC roots,被GC roots引用的对象不被GC回收. ...

  10. android 多模块项目构建一

    项目构建之项目文件搭建: 1.在android studio中new project,如:mydemo,如在D盘下. 2.创建几个module,选择为Library. 3.项目中用到多模块,最好使用动 ...