golang基础

假期有时间,学两天golang,了解性能与思想。

1、首先装环境,下载golang环境包:https://golang.google.cn/dl/,下载后默认装在c:\Go。

2、(后面这步看环境,有时候能省略)然后把bin添加到path中,即可开始go!

hello.go

package main //这个包的name main 

import "fmt" //导入一个包,fmt是go的常用读写包

func main(){
	fmt.Println("hello world") //fmt中 Println 输出,注意结尾不带;
}

go run hello.go

这里是.go为后缀,go run xxx.go 为运行

go build hello.go 则生成一个二进制文件,./hello.exe  hello.exe  都可以直接运行。

package main

import "fmt"

//标识符:大写字母开头,Abc,可以被外部包引用。abc则仅可被内部引用
//var age int  //声明age为int类型,无说明则默认为0
var res int = 105
const PI = 3.14; // 常量定义。(;为啥加不加都能跑)
var name = "gopher"  // 全局变量的声明和赋值

func main(){
    fmt.Println(PI)
    fmt.Println(name)
    /*
    var a,b,c int
    fmt.Scan(&a, &b, &c)
    fmt.Println(a+b+c)
    */
}
//变量的声明
var isActive bool  // 全局变量声明
var enabled, disabled = true, false  // 忽略类型的声明
func test() {
    var available bool  // 一般声明,bool默认为false(0)
    valid := false      // 简短声明
    available = true    // 赋值操作
}

Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

数据类型:布尔、数字、字符串、派生【指针(Pointer)、数组、结构化类型(struct)、
Channel(管道,用于goruntine之间通信,每个 channel 都有一个特殊的类型,
也就是 channels 可发送数据的类型。一个可以发送 int 类型数据的 channel 一般写为 chan int),
切片,接口,Map类型】
nil的意思是无,或者是零值。
pointer的初始化为nil
nil 指针也称为空指针
iota只能在常量的表达式中使用
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
const (
    a = iota
    b
    c
)

循环:

for i := 1; i <= 9; i++ {
        fmt.Println("it is ",i)
}

函数的使用:

package main

import "fmt"

//(x,y,string) 表示传入参数的类型
//(string,string) return 的参数
func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Go", "Docker") //直接拿返回值,不需要定义数据类型了
   fmt.Println("after swap :",a,b)
}

数组初始化:

func main() {
   var balance [10] float32
   var a [5][5] int
   var b = [3][5]int {{1, 2, 3, 4, 5}, {0, 9, 8, 7, 6}, {3, 4, 5, 6, 7}}
   var c = [3]int {1,2,3}
   a[1][2] = 3
   balance[0] = 0.5
   fmt.Println(balance[0])
   fmt.Println(a[1][2])
   fmt.Println(b[1][2])
   fmt.Println(c[1])
}
修改实参
swap(&a, &b);


func swap(x *int, y *int) { //x为这个值地址的指针
   var temp int
   temp = *x    /* 保存 x 地址的值 */
   *x = *y      /* 将 y 赋值给 x */
   *y = temp    /* 将 temp 赋值给 y */
}
//交换这两个值
结构体
type Books struct {
   title string
   author string
   subject string
   book_id int
}

func main() {
   var test Books
   test.title="123"
   test2 := Books{"go","you","abc",10} //注意:= 与 =
   fmt.Println(test.title,'\n',test2)

}
切片
package main

import "fmt"

func main() {
   var a [10]int //数组
   a[0]=123
   a_len :=len(a)
   fmt.Println(a[0])
   fmt.Println("len = ",a_len)

   slice1 := make([]int, 6) //切片,类似动态数组,vector?
   slice1[0]=555
   fmt.Println("slice1 = ",slice1,len(slice1),cap(slice1))
   slice2 := slice1[1:5] //类似numpy的操作
   fmt.Println("slice2 = ",slice2,len(slice2))
   slice2 = append(slice2,123,5,7)
   fmt.Println("slice2 = ",slice2," len = ",len(slice2)," cup = ",cap(slice2))
//len与cup是不同的概念,len为现在元素的个数,cup为一个长度为k的空间,左指针left,右指针right。
//那么cup为总容量-left指针位置的长度
//那么slice长度为6,slice[:4],cup为6
//slice[2:],cup=4
//slice大部分时候性能表现不错,连续内存有利cache
   sum := 0
   for i,num := range slice2{
      fmt.Println(i,num)
      sum +=num
   }
   fmt.Println(sum)
}

map

func main() {
   map_name := make(map[int]int)
   map_name[123]=456
   map_name[11]=22
   fmt.Println(map_name,"    ====    ",map_name[11])
   for i,num := range map_name{
      fmt.Println(i,num)
   }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值