exploit
1/21/2019 - 6:48 AM

go code example

// hello go
package main

import "fmt"

func main(){
	fmt.Println("Hello Go")
}
// 格式化输出
package main
import "fmt" 

// 负数向左,正数向右
func main(){
	fmt.Printf("%-15v say %4v %5v %4v %4v","John Doe",1000,"+",1000,"=")
}
// 变量必须先声明在使用
package main 

import "fmt"

// 两种变量类型
// 常量 
// 变量
// 变量声明
/*
num := 100 // 只存在于函数里面
var num = 100
var (
	num = 100
	num2 = 1000
)
*/

func main(){
	const lightSpeed = 100
	var distance = 1000
	fmt.Println(distance / lightSpeed ,"seconds")
}
package main

import "fmt"

func main(){
	var content = "Hello World"
	if content == "Hello World" {
		fmt.Println("This is Hello World")
	}else if content == "Hello Go"{
		fmt.Println("Hello Go")
	}else{
		fmt.Println("Didn't get anythings")
	}

}
package main

import "fmt"

func main(){
	var flag1 = true
	var flag2 = false

	if flag1 || flag2 {
		fmt.Println("or")
	}else if flag1 && flag2 {
		fmt.Println("and")
	}

	if !flag2 {
		fmt.Println("not flag2")
	}

}
package main

import "fmt"

func main(){
	variables := "Hello"
	switch variables {
	case "Hello":
		fmt.Println("Hello")
	case "World":
		fmt.Println("World")
	default:
		fmt.Println("Default")
	}
}
package main

import "fmt"

func main(){
	for con:=20;con>10;con--{
		fmt.Println(con)
		
	}
	count := 20
	for count >= 10 {
		fmt.Println(count)
		count -- 
	}

	count2 := 20
	for {
		count2 -- 
		if count2 < 10 {
			break
		}
	}
}
package main

import (
	"fmt"
	
)

func main() {
	question := "Hello"
	for i,c := range question {
		fmt.Printf("%v - %c",i,c)  // index - value 
	}
	
}
// 函数声明
func test(x,y int) int {
  return x + y
}

// 函数作为参数 传递给另一个函数
func run(a,b int, test func(x,y int) int ) int {
  return test(a,b)
}

//运行
func main() {
  result := run(1,3,test)
  fmt.Println(result)
}
// 在 go 里面我们可以定义自己的类型
// 一旦你定义了自己的类型,比如你定义了一个kevin 类型
// 虽然 kevin 是 float64 类型,但是你传入一个 float64 类型的值,一样会出错
type kevin float64

func plus(x,y kevin)kevin{
	return y + x
}

func main() {
	var num1 float64 = 10
	result2 := plus(num1,2) // prog.go:29:17: cannot use num1 (type float64) as type kevin in argument to plus
	fmt.Println(result2)
}
// 自定义函数类型,可以简化将函数作为参数的时候的代码
// 适用于多处地方需要使用这个函数作为参数
// 否则代码可读性会降低

// 注意, 这里 _add  和 add 一定要不同的命名
type _add func(x,y int) int  

func add(x,y int) int {
	return x+y
}

func run(a,b int, x _add) int {
	return x(a,b)
}

func main() {
	result := run(1,10,add)
	fmt.Println(result)
}
// go 里面没有对象这个概念,但是却有方法这样的概念
//函数跟方法的区别在于,函数是全局的,方法是实例的 
package main

import (
	"fmt"
)

type kevin float64 
type john float64

//method
func (k kevin) john() john {
	return john(k - 100.0)
}

func main() {
	var k kevin = 200.0
	r := k.john()
	fmt.Println(r)
}
//匿名函数
package main

import (
	"fmt"
)

func main() {
	f:= func(x,y int) int{
		return x+y
	}
	fmt.Println(f(1,2))
}

// 立即执行匿名函数
func main() {
	func(x,y int) int{
		return x+y
	}(1,2)
}
package main

import (
	"fmt"
)

func main() {
	// 数组的声明
	var arr1 =[6]string{"Hello","World","John","Here","is","World"}
	// 声明固定个数
	var arr2 [5]int
	// 声明数组,也是固定个数,但是基于你声明时候的元素个数,自动计算出其数组长度
	var arr3 = [...]string {"Hello","Hello2"}
	
	
	fmt.Println(arr1)
	fmt.Println(arr2)
	fmt.Println(arr3)
}
package main

import (
	"fmt"
)

func main() {
	// 数组的声明
	var arr1 =[6]string{"Hello","World","John","Here","is","World"}
	// 使用range
	for i,v := range arr1 {
		fmt.Println(i,v)
	}
	// 使用序列循环
	for i:=0;i<len(arr1);i++{
		fmt.Println(arr1[i])
	}
}