第一个go程序和基本语法
第一个go程序和基本语法
一. 第一个go程序
//package 声明开头表示代码所属包
package main
//导入格式化包,引了必须用
import "fmt"
//左括号{不能单起一行
func main(){
fmt.Println("Go Lang, 开始浪吧~")
}
// "//"表示单行注释
// "*/ */"表示多行注释
二. 基础语法
1. 命名
go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则
一个名字必须以一个字母或下划线开头,后面可以跟任意数量的字母、数字或下划线
go区分大小写,hello和Hello不一样
go语言中有25个关键字,不能用于自定义名字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
还有30多个预定义的名字,用于内建的常量、类型和函数
内建常量:
true false iota nil 内建类型:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error 内建函数:
make len cap new append copy close delete
complex real imag
panic recover
2. 变量
2.1 声明变量:
//package 声明开头表示代码所属包
package main
import "fmt"
func main() {
//第一种:
var v1 int
var v2 int
//第二种:
var v3, v4 int
//第三种
var(
v5 int
v6 int
)
//零值
fmt.Println(v1, v2, v3, v4, v5, v6)
}
2.2 变量初始化
//package 声明开头表示代码所属包
package main
import (
"fmt"
"reflect"
)
func main() {
//方式一:
var v1 int = 10
//方式二:go编译器自动推到出变量类型
var v2 = 20
//方式三:声明加赋值, 必须在函数里面用
v3 := 30
fmt.Println(v1, v2, v3)
//利用反射查看变量类型
fmt.Println("v3的类型是", reflect.TypeOf(v3))
}
//10 20 30
//v3的类型是 int
2.3 变量赋值
//package 声明开头表示代码所属包
package main
import "fmt"
func main() {
//1. 直接赋值
var v1 int
v1 = 123
//2. 声明并赋值
i := 10
j :=20
//3. 多重赋值
var v2, v3, v4 int
v2, v3, v4 = 1, 2, 3
fmt.Println(v1, v2, v3, v4, i, j)
}
匿名变量:
//package 声明开头表示代码所属包
package main
import "fmt"
//(int, sting): 返回值类型
func test()(int, string){
return 666,"浪不浪"
}
func main() {
// "_"是特殊变量, 占位
_, s1 := test()
fmt.Println(s1)
a1, s1 := test()
fmt.Println(a1,s1)
}
//浪不浪
//666 浪不浪
.
//package 声明开头表示代码所属包
package main
import "fmt"
var abc = 456
func main() {
//定义
var a int
var s string
fmt.Println(a,s)
fmt.Printf("%d %q\n", a,s)
//定义多个
var c,b int = 3,4
fmt.Println(c,b)
//不指定类型定义, 可以写一行
j,k,q :=3,true,"xx"
fmt.Println(j,k,q)
}
//0
//0 ""
//3 4
//3 true xx
3 常量与枚举
//package 声明开头表示代码所属包
package main
import "fmt"
//常量 const
const filename = "luhan.txt"
////常量必须是可确定的数字, 字符串, 布尔值
//var a = "haha"
//const file2 = a
//定义函数, 函数内写常量
func consts() {
//多个常量
const (
XX = "haha1"
OO = "haha2"
filename = "haha3"
)
fmt.Println(XX, OO, filename)
}
//1. 定义枚举类型
func enums() {
const (
python = 0
java = 1
golang = 2
)
fmt.Println(python, java, golang)
}
//2. 自增的枚举类型
func enums1() {
const (
//iota关键字是自增
pyhton = iota
java
golang
)
fmt.Println(pyhton, java, golang)
}
//3. iota还可以参与计算
func enums2() {
const (
//位运算, n*2(10*1), 2^0 = 1
b = 1 << (10 * iota)
kb
mb
gb
tb
pb
)
fmt.Println(b, kb, mb, gb, tb, pb )
}
func main() {
consts()
enums1()
enums2()
}
//haha1 haha2 haha3
//0 1 2
//1 1024 1048576 1073741824 1099511627776 1125899906842624
4. 数据类型
u开头是无符号类型
8,16,32这些,最大最用是增加可移植性和维护性
short int long
类型名称 有无符号 bit数
int8 Yes 8
int16 Yes 16
int32 Yes 32
int64 Yes 64
uint8 No 8
uint16 No 16
uint32 No 32
uint64 No 64
int Yes 等于cpu位数
uint No 等于cpu位数
rune Yes 与 int32 等价
byte No 与 uint8 等价
uintptr No -
.
//package 声明开头表示代码所属包
package main
import (
"fmt"
"reflect"
)
func main() {
//1.整型
var v1 int32
v1 = 123
v2 := 64
fmt.Println(v1,v2)
//默认是int
fmt.Println(reflect.TypeOf(v2))
//2.浮点型
var f1 float32
f1 = 12
fmt.Println(f1)
f2 := 12.0
fmt.Println(reflect.TypeOf(f2))
//3.布尔型
var b1 bool
b1 = true
fmt.Println(b1)
b2 := (1==2)
//打印类型
fmt.Println(reflect.TypeOf(b2))
//4.字符型
var ch byte
ch = 'a'
fmt.Println(ch)
fmt.Printf("ch = %c",ch)
//5.字符串
var str string
str = "luhan"
s := str[0]
fmt.Println(s)
//反括号圈起来的字符串,原样输出
str2 := `hello
luhan \n \r xx
`
fmt.Println("str2=",str2)
}
//123 64
//int
//12
//float64
//true
//bool
//97
//ch = a108
//str2= hello
//luhan \n \r xx
5. fmt包的使用
输出:
//package 声明开头表示代码所属包
package main
import "fmt"
func main() {
//整型
a := 15
//%b:二进制
fmt.Printf("a = %b\n",a)
//只输出一个%
fmt.Printf("%%\n")
//字符
ch := 'a'
fmt.Printf("ch = %c,%d\n",ch,97)
//浮点
f := 3.14
//%g紧凑方式输出
fmt.Printf("f = %f,%g\n",f,f)
//布尔型
fmt.Printf("%t,%t\n",true,false)
//字符串
str := "hello.go"
fmt.Printf("str = %s\n",str)
}
//a = 1111
//%
//ch = a,97
//f = 3.140000,3.14
//true,false
//str = hello.go
输入:
//package 声明开头表示代码所属包
package main
import "fmt"
func main() {
//用户输入内容, 程序接收
var v int
//Print是不回车
fmt.Print("请输入一个整型:")
//直接输入
//如果不是int,输出零值
fmt.Scan(&v)
fmt.Println(v)
}
//请输入一个整型:5
//5
6. 类型别名
//package 声明开头表示代码所属包
package main
import (
"fmt"
"reflect"
)
func main() {
//type关键字定义别名
type myint int
var i myint = 100
fmt.Println(i)
fmt.Println(reflect.TypeOf(i))
}
//100
//main.myint
7. 类型转换
go类型转换不允许隐式转换
//package 声明开头表示代码所属包
package main
import "fmt"
func main() {
var ch byte = 'a'
var i int = int(ch)
fmt.Println(ch)
fmt.Println(i)
}
//97
//97
8. 运算符
算术运算符
+ 相加 A + B 输出结果 30
- 相减 A - B 输出结果 -10
* 相乘 A * B 输出结果 200
/ 相除 B / A 输出结果 2
% 求余 B % A 输出结果 0
++ 自增 A++ 输出结果 11
-- 自减 A-- 输出结果 9
关系运算符
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为 True
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为 True
逻辑运算符
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 (A || B) 为 True
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True
位运算符
& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12, 二进制为 0000 1100
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 (A | B) 结果为 61, 二进制为 0011 1101
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49, 二进制为 0011 0001
<< 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 A << 2 结果为 240 ,二进制为 1111 0000
>> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 A >> 2 结果为
赋值运算符
= 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C *= A 等于 C = C * A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后赋值 C <<= 2 等于 C = C << 2
>>= 右移后赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
|= 按位或后赋值 C |= 2 等于 C = C | 2
其他
& 返回变量存储地址 &a; 将给出变量的实际地址。
* 指针变量。 *a; 是一个指针变量
第一个go程序和基本语法的更多相关文章
- 编写第一个MapReduce程序—— 统计气温
摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...
- 第一个PyQt程序
这个程序虽然小,具备pyqt程序的皱型,可以作为一个模板使用了 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtW ...
- 【C语言】03-第一个C程序代码分析
前面我们已经创建了一个C程序,接下来分析一下里面的代码. 项目结构如下: 一.代码分析 打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- 【C语言】01-第一个c程序代码分析
创建了一个C程序,接下来分析一下里面的代码. 项目结构如下: 一.代码分析 打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下: 1 #i ...
- [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序
本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...
- 【2014】【辛星】【php】【秋季】【2】第一个php程序
<span style="font-family:KaiTi_GB2312;font-size:18px;">*******************设置server** ...
- 做为一个Java程序员,你需要哪些傍身的技能?
最近总有些断断续续的思考,想想从我入行以来,我到底学会了什么,做成过什么,以后要做什么,如何提升自己······· 工作3年了,常听人说3年,5年,10年是程序员的坎,每过一个都会有新的想法,新的改变 ...
- C#.NET学习笔记2---C#.第一个C#程序
C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序: ...
随机推荐
- http自己定义超时检測方法、主动抛出异常
上次为了解决无网路由器超时的问题,将问题重心转移到了HttpClient. HttpUrLConnection上面,什么各种设置ReadTimeout. connectionTimeOut,还有所谓的 ...
- CSS3 网格布局(grid layout)基础知识 - 隐式网格自己主动布局(grid-auto-rows/grid-auto-columns/grid-auto-flow)
网格模板(grid-template)属性及其普通写法(longhands)定义了一个固定数量的轨道.构成显式网格. 当网格项目定位在这些界限之外.网格容器通过添加隐式网格线生成隐式网格轨道. 这些隐 ...
- 《解读window核心编程》 之 注冊表
1 注冊表的作用及组织形式 Windows系统使用注冊表来存储系统和应用程序配置数据.非常多系统和应用程序重要的配置的信息都存储在注冊表中. 注冊表是一种以树型结构组织的数据库.树的每个节点称 作键( ...
- c# 删除程序占用的文件,强力删除文件,彻底删除文件,解除文件占用
c# 删除程序占用的文件.清理删除文件.彻底删除文件,解除文件占用 文件打开时,以共享读写模式打开 FileStream inputStream = new FileStream(name, File ...
- luogu3469 [POI2008]BLO_Blockade
题目大意 给一个无向连通图,求对于每一个点,去掉该点后图中连通结点有序对的减少量. 思路 当时想这道题时,我想到:枚举每一个点,在删去它后连通的几个部分中Dfs得到各个部分的点的个数从而得到解,但是我 ...
- WinForm中的ListBox组件编程
ListBox组件是一个程序设计中经常使用到的组件,在Visual C#和Visual Basic .Net程序中使用这个组件,必须要在程序中导入.Net FrameWork SDK中名称空间Syst ...
- P1993 小K的农场 差分约束系统
这个题是一道差分约束系统的裸题,什么是差分约束系统呢?就是给了一些大小条件,然后让你找一个满足的图.这时就要用差分约束了. 怎么做呢?其实很简单,就是直接建图就好,但是要把所有条件变为小于等于号,假如 ...
- bzoj1179 [Apio2009]Atm——缩环最长路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1179 tarjan 缩环,然后求到有酒吧的点的最长路即可: 但一开始想缩环后用拓扑序求答案, ...
- 79.员工薪水报表 Extjs 页面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" ...
- Java 解析Json数据
Json格式字符串{success:0,errorMsg:"错误消息",data:{total:"总记录数",rows:[{id:"任务ID" ...