编写第一个go程序
1.编写第一个go程序
首先说明下go语言的语言结构:
go语言是由package包组织的,包类似于其他语言的模块或库。每个程序的开始都用package声明,package+包的名字。
package后面用import导入包。必须要导入包程序才能编译。
import后面跟组成程序的元素,函数,变量等。
函数的声明:func关键字,函数名,[函数列表],[返回值列表],大括号内的函数体
package main /*每个go应用程序都包含一个名为main的包*/
import "fmt" /*fmt包实现了格式化IO的函数*。 用来格式化输出和扫描输入/
func main() {
fmt.Println("hello,world") /*println是fmt的基本输出函数,输出一个或多个用空格分隔的值,结尾使用一个换行符*/
}2.声明变量
var indentifier type
var indentifier1, indentifier2 type变量没有赋值:对于数字类型是0,布尔值是false, 字符串是“”, 对于接口和引用类型(slice, 指针,map,通道,函数)是nil
:= 用于短变量声明
var a string="louise"
fmt.Print(a)
var b, c int= 1 , 2
fmt.Println(b , c)
i,j := 0,1 //声明变量并初始化
i,j=j,1 //交换i和j的值以下几种声明变量的方式是等价的
s := "" //通常在一个函数内部使用,不适合包级别的变量
var s string
var s ="" //少用
var s string ="" //类型一致的情况下是冗余的,类型不一样需要使用变量可以通过调用返回多个值的函数进行初始化
var f,err=os.Open(name)3.常量
const indentifier [type] =value
const c_name1, c_name2=value1, value2itoa:初始为0,const每新增一行常量将计数一次
const(
a=iota //0
b //1
c //2
d="hi" //hi
e //hi
f=100 //100
g //100
h=iota //7
i //8
)
fmt.Print(a,b,c,d,e,f,g,h,i)4.变量存储地址和指针变量
不是所有的值都有地址但是所有的变量都有。使用指针可以在无须知道变量名字的情况下,间接读取或更新变量的值。
例如:var x int
&x获取一个指向整型变量的指针,它的类型是整型指针(*int)
指针指向的变量写成*p
指针类型的零值是nil. 如果p !=nil 结果是true说明p指向一个变量。两个指针当且仅当指向同一个变量或者两者都是nil的情况下才相等。
x : =1
p : =&x //p指向x或说p包含x的地址
fmt.Println(*p) //1
*p=2 //重新赋值给p指向的变量
fmt.Println(x) //2
var a int = 4
var b int32
var c float32
var ptr *int //声明变量ptr *int 类型:整型指针
fmt.Printf("%T\n",a) //int
fmt.Printf("%T\n",b) //int32
fmt.Printf("%T\n",c) //float32
ptr=&a //&a返回变量存储地址 ptr指向变量a
fmt.Printf("%d\n",a) //4
fmt.Printf("%d\n",*ptr) //4##返回指针地址
package main
import "fmt"
func main() {
var p = f()
fmt.Println(p)
}
func f() *int{
v := 1
return &v //0xc00000a0b0
}##传递自增的指针指向的变量
package main
import "fmt"
func main() {
v :=1
incre(&v)
fmt.Println(incre(&v)) //3 ?
}
func incre(p *int) int{
*p++
return *p
}5.new函数
内置new函数。表达式new(type)创建一个未命名的类型变量,初始化为类型的零值,并返回地址。
import "fmt"
func main() {
p:=new(int) //创建一个*int类型的变量,int指针类型的变量,返回地址。相当于未命名的变量var, 声明int指针类型,返回地址。p=&var
fmt.Println(*p) //0 没有赋值数字类的默认是0
}
package main
import (
"fmt"
"os"
)
//func main() {
// var s, sep string
// for i :=1; i < len(os.Args);i++{ //:=短变量声明,声明一个或多个变量,并根据初始化的值给予合适的类型
// s += sep + os.Args[i]
// sep=" "
// }
// fmt.Println(s)
//}
func main() {
s, sep := "",""
for _, arg := range os.Args[1:] { //空标识符。用在语法需要变量名但是逻辑不需要
s += sep +arg
sep=""
}
fmt.Println(s)
}
















