简单的go语言程序
package main
import "fmt"
func main() {
var age, name string = "18", "Joe"
var res = fmt.Sprintf("my name is %s, and my age is %s", name, age)
fmt.Println(res)
}
func init() {
fmt.Println("test init")
}
func varTest() {
var funcName, funcTime string = "varTest", "now"
fmt.Println(funcName + funcTime)
}
使用go run来执行
使用go build 来生成二进制文件
go语言结构
go语言的基础组成部分如下:
包声明
示例
package main
解释
第一行代码 package main 定义了包名。 必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。 package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包
引入包
import "fmt"
import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
函数
func main() {
fmt.Println("")
}
”{“不能单独放在一行
func main() 是程序开始执行的函数。
main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)
变量
var name = 'Test Name'
语句 & 表达式
%d 表示整型数字,%s 表示字符串
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
注释
/…/ 是注释,在程序执行时将被忽略。 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。 多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段
标识符
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1, 那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包), 这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )
数据类型
布尔型
布尔型的值只可以是常量 true 或者 false
数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
类型 | 描述 |
---|---|
uint8 | 无符号 8 位整型 (0 到 255) |
uint16 | 无符号 16 位整型 (0 到 65535) |
uint32 | 无符号 32 位整型 (0 到 4294967295) |
uint64 | 无符号 64 位整型 (0 到 18446744073709551615) |
int8 | 有符号 8 位整型 (-128 到 127) |
int16 | 有符号 16 位整型 (-32768 到 32767) |
int32 | 有符号 32 位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型
类型 | 描述 |
---|---|
float32 | IEEE-754 32位浮点型数 |
float64 | IEEE-754 64位浮点型数 |
complex64 | 32 位实数和虚数 |
complex128 | 64 位实数和虚数 |
其他数字类型
类型 | 描述 |
---|---|
byte | 类似 uint8 |
rune | 类似 int32 |
uint | 32 或 64 位 |
int | 与 uint 一样大小 |
uintptr | 无符号整型,用于存放一个指针 |
字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。 Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
派生类型
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
go语言变量
一般使用var关键字声明变量:
var identifier type
可以同时声明多个变量:
var identifier1, identifier2 type
变量声明时如果没有设置默认值,那么默认值为0,string类型的默认值为空
如果一个局部变量声明了但是没有使用,会报编译错误
全局变量允许声明但不使用
同一类型的多个变量可以声明在同一行
如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
// 当变量已定义
var a, b int
var c string
a, b, c = 3, 4, "test"
//当变量未定义直接赋值
a, b, c := 3, 4, "test"
常量
定义格式:
const identifier [type] = value
多个相同类型的声明简写为:
const c_name1, c_name2 = value1, value2
常量还可用作枚举
const (
Unknown = 0
Female = 1
Male = 2
)
iota
特殊常量,可以认为是一个可以被编辑器修改的变量,示例如下:
hexiaojiao@MS-RWTYITLHLCWO:~/goPro/goTest$ cat iotaTest.go
package main
import "fmt"
func main() {
const (
a = iota //iota
b
c
d
e = "tete"
f
g = 100
h
i
j = iota
k
l
)
fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l)
}
// 0 1 2 3 tete tete 100 100 100 9 10 11
特殊示例:
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
/**
i= 1
j= 6
k= 12
l= 24
解析:
i = 1 << 0
j = 3 << 1
k = 3 << 2
l = 3 << 3
**/