第一个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#程序: ...
随机推荐
- @Repository @Service 和@Autowired 的使用
解释: @Controller 声明Action组件 @Service 声明Service组件 @Service("myMovieLister") @Repositor ...
- Chromium网页Graphics Layer Tree创建过程分析
在前面一文中.我们分析了网页Render Layer Tree的创建过程.在创建Render Layer的同一时候,WebKit还会为其创建Graphics Layer.这些Graphics Laye ...
- select readonly 不能看到其它选项解决方式
在html中是select readonly后.依旧能够下拉选择.不想做disabled添加隐藏域,以下提供两种解决方式 解决方式1: onfocus="this.defaultIndex= ...
- 64位oracle数据库用32位plsql developer无法连接问题(无法载入oci.dll)
在64位操作系统下安装oracle数据库,新下载了64位数据库(假设是32位数据库安装在64位的操作系统上,无论是client还是server端.都不要去选择C:\Program Files (x86 ...
- Android+Jquery Mobile学习系列(8)-保单/生日提醒功能
其实这个App基本功能早已做完,并且交给老婆试用去了.但由于最近项目要保证稳定,所以持续加班,没有时间写最后一点内容,本节也就简单截图做个说明,不详细叙述实现方式.我会把代码上传到最后一章中,有兴趣的 ...
- Java-java-com-util-common-service:CrudService.java
ylbtech-Java-java-com-util-common-service:CrudService.java 1.返回顶部 1. package com.shineyoo.manager.ut ...
- 第11课 Git GUI程序的基本功能
11-1 Git GUI程序的基本操作
- PHP 二维数组排序 可以按指定 键值排序
<?php header("Content-Type:utf-8"); $arr = array( 0 => array( 'name' => '国际原油价格', ...
- C#接入第三方支付一些小问题
13年第一次接入支付宝的时候,支付宝的api还不是很好用,费了些劲才完成,本月再次接入的时候发现已经很好用了,接入过程非常顺畅,只出现了一个小问题,我的金额默认是保留了4位小数,支付宝api只接受最多 ...
- position中的absolute、fixed区别
absolute: 绝对定位,相对于body. fixed: 固定定位,相对于浏览器视窗,不随滚动条的滚动而滚动. 这两个属性概念比较模糊,一般在做左边列表菜单,右边内容区域的时候会用到这样的定位 ...