go编写第一个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, value2
itoa:初始为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) }

浙公网安备 33010602011771号