码迷,mamicode.com
首页 > 编程语言 > 详细

go语言学习

时间:2018-05-22 16:39:02      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:错误信息   创建   运算   slice   信息   data   使用   VID   UNC   

package main

import "fmt"

var x, y int
var (  // 这种因式分解关键字的写法一般用于声明全局变量
    a int
    b bool
)
/* 定义结构体 */
type Circle struct {
	radius float64
}
type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {

	var a = "菜鸟教程"
	const b string = "runoob.com"
	var c bool = true
	fmt.Println("Hello, World!",a,b,c)
	//classic
	for a:=0;a<2;a++ {fmt.Println(a)}
	//while
	d:=0
	for(d<2){fmt.Println(d);d++}
	//forever loop
	for{d++;if(d==10){fmt.Println("break");break}}
    
	var c1 Circle
	c1.radius = 10.00
	fmt.Println("Area of Circle(c1) = ", c1.getArea())

	var Book2 Books        /* 声明 Book2 为 Books 类型 */
	Book2.title="test.go"
	Book2.author="fsrong"
	Book2.subject="trinne"
	Book2.book_id=110
	printBooks(&Book2)

	//splitArr
	splitArrar()

	//range
	rnage_t()

	//map
	map_t()

	//delete
	delete_t()

	//递归
	// factorial(5)
	fmt.Println(factorial(5))

	//interface
	var iphone IPhone
	iphone.call()

	var phone Phone
	phone=new(NokiaPhone)
	phone.call()
	phone=new(IPhone)
	phone.call()

	//error interface
    // 正常情况
    if result, errorMsg := Divide(100, 10); errorMsg == "" {
        fmt.Println("100/10 = ", result)
    }
    // 当被除数为零的时候会返回错误信息
    if _, errorMsg := Divide(100, 0); errorMsg != "" {
        fmt.Println("errorMsg is: ", errorMsg)
    }
    var div DivideError;div.divider=10;div.dividee=100;
    fmt.Println(div.Error())

    var err error=new(DivideError)
    fmt.Println(err.Error())
}

//该 method 属于 Circle 类型对象中的方法
func (cc Circle) getArea() float64 {
  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * cc.radius * cc.radius
}

//poniter
func max(a *int,b *int) int {
	if ( *a > *b){
	 return *a
	}else{
		return *b
	}
}
//funftion
func add(a int,b int) int {
	c := a + b
	fmt.Println(c)
	return c
}
//结构体作为函数参数
func printBooks(book1 *Books) {
	fmt.Println(book1.title)
	fmt.Println(book1.author)
	fmt.Println(book1.subject)
	fmt.Println(book1.book_id)
}
//Go 语言切片(Slice)
func splitArrar() {
		//split arrar
	var arr =[]int{1,2,3,4}
	s:=arr[1:]
	fmt.Println(s)
	s=arr[2:len(arr)]
	fmt.Println(s)
	s1:=make([]int,3,5) 
	fmt.Println(s1)
	fmt.Println(cap(arr))
	//append 1,2,3
	s=append(s,1,2,3)
	fmt.Println(s)

	//copy befor Expansion of consumption
	s1=make([]int,len(s),cap(s)*2)
	copy(s1,s)
	fmt.Println(s1)

	for e := range s1{
		fmt.Println(s1[e])
	}
}

//range
func rnage_t() {
	num := []int{1,2,3,4,5}
	var sum int=0
	//index,value
	for _,n := range num{
		sum += n
	}
	fmt.Println(sum)

	var str string="abcd"
	for i:=range str{
		fmt.Println(str[i])
	}
}

//map
func map_t() {
	// var strStrMap map[string]string
	//如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
	strStrMap := make(map[string]string)
	strStrMap["a"]="A"
	strStrMap["b"]="B"
	strStrMap["c"]="C"
	strStrMap["d"]="D"
	fmt.Println(strStrMap)
	for key:= range strStrMap{
		fmt.Println(strStrMap[key])
	}
}

//delete
func delete_t() {
	/* 创建map */
    strStrMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}
    fmt.Println("原始地图")
    /* 打印地图 */
    for country := range strStrMap {
        fmt.Println(country, "首都是", strStrMap [ country ])
    }
    /*删除元素*/ 
    delete(strStrMap, "France")
    fmt.Println("法国条目被删除")
    fmt.Println("删除元素后地图")
    for country := range strStrMap {
    fmt.Println(country, "首都是", strStrMap [ country ])
    }
}

//递归,阶乘之和
var sum uint64=0
func factorial(n uint64)(result uint64) {
    if (n > 0) {
        result = n * factorial(n-1)
      	sum += result
        fmt.Println(sum)
        return result
    }
    return 1
}

//interface 接口中的方法一定要被使用者实现
type Phone interface {
    call()
}

//--------------------------
type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
    fmt.Println("I am Nokia, I can call you!")
}

//--------------------------
type IPhone struct {
}

func (iPhone IPhone) call() {
    fmt.Println("I am iPhone, I can call you!")
}

//error类型是一个接口类型,这是它的定义
type error interface {
    Error() string
}
// 定义一个 DivideError 结构
type DivideError struct {
    dividee int
    divider int
}
// 实现 `error` 接口
func (de *DivideError) Error() string {
    strFormat := `
    Cannot proceed, the divider is zero.
    dividee: %d
    divider: %d
`
    return fmt.Sprintf(strFormat, de.dividee,de.divider)
}
// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
    if varDivider == 0 {
        dData := DivideError{
            dividee: varDividee,
            divider: varDivider,
        }
        errorMsg = dData.Error()
        return
    } else {
        return varDividee / varDivider, ""
    }

}

  

go语言学习

标签:错误信息   创建   运算   slice   信息   data   使用   VID   UNC   

原文地址:https://www.cnblogs.com/fushou/p/9072598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!